Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
6.0.0 - Русский

Change language to:
English - Français - 日本語 - Português -

Please note that the recommended version of Scilab is 2024.0.0. This page might be outdated.
See the recommended documentation of this function

Справка Scilab >> Строки > strtod

strtod

проверка синтаксиса и преобразование строк литеральных чисел в десятичные числа

Синтаксис

d =  strtod(str [,decimalseparator])
[d, tails] = strtod(str [,decimalseparator])

Аргументы

str

текстовый (строковый) одиночный элемент, вектор или матрица.

decimalseparator

выбранный десятичный разделитель: "." (по умолчанию) или ",".

d

скаляр, вектор или матрица десятичных чисел.

tails

строка или матрица строк: оставшиеся части str после начал чисел (если есть).

Описание

Инструкция [d, tails] = strtod(str) проверяет синтаксис каждого строкового значения str и пытается интерпретировать его содержимое как десятичное число:

  • Если это удалось, по крайней мере для головной части str(i), то соответствующее число возвращается в d(i). Если возможно, завершающая часть str(i) игнорируется и возвращается в tails(i); в противном случае tails(i) возвращает "".
  • В противном случае d(i) возвращает %nan, а tails(i) полностью равна str(i).

  • Комплексные числа: функция strtod(..) проверяет синтаксис и возвращает только их вещественную часть при условии, что она записана перед мнимой частью.
  • strtod(..) не признаёт никаких разделителей тысяч, ни " ", ни ",", ни каких иных.
  • strtod(..) проверяет синтаксис строк только по десятичным числам. Она не интерпретирует строки шестнадцатеричных, восмеричных или иных чисел.
  • strtod(..) не интерпретирует никаких имён переменных, предопределённых в Scilab или предопределённых пользователем, или специальных строк %inf или %nan. Следовательно:
    s = ["-0.034" "- 0.034"  "+1234.5678" "1234 5678"
         "-.764"  "+.432"    "12,231.7"   "-5.458,871"
         "1e43"   "-3.5d-12" "-1.2+i"     "i+1.2"
         ""       "%inf"     "Inf"        "-Inf"
         "%i"     "%pi"      "%e"         "%eps"
         "%F"     "0x19B"    "#14C4"      "o5745"
         ]
    strtod(s)
      s  =
    !-0.034  - 0.034   +1234.5678  1234 5678   !
    !-.764   +.432     12,231.7    -5.458,871  !
    !1e43    -3.5d-12  -1.2+i      i+1.2       !
    !        %inf      Inf         -Inf        !
    !%i      %pi       %e          %eps        !
    !%F      0x19B     #14C4       o5745       !
    --> strtod(s)
     ans  =
      -0.034       Nan         1234.5678   1234.
      -0.764       0.432       12.        -5.458
       1.000D+43  -3.500D-12  -1.2         Nan
       Nan         Nan         Nan         Nan
       Nan         Nan         Nan         Nan
       Nan         0.          Nan         Nan
    
  • strtod(..) не интерпретирует эскейп-последовательности "\n", "\t" и др.
  • Эта функция основана на Си-функции strtod, которая по-разному ведёт себя в Windows и Linux. На самом деле в Windows можно использовать "d" и "D" для экспонент, но нельзя использовать шестнадцатеричные числа.

Примеры

s = ["123.556 abc " ".543"      "#58B" "0x73 " "%inf"
     "-1.47e-71"    "67,432.57" " 23,5" "-,57" "Inf" ]
[num, trail] = strtod(s);
num, "/"+trail+"/"
// С "," в качестве десятичного разделителя:
[num, trail] = strtod(s, ",");
num, "/"+trail+"/"

Смотрите также

  • evstr — вычисление выражений
  • isnum — проверка того, что строка представляет число
  • isdigit — проверка того, что символы в строке являются цифрами между 0 и 9
  • bin2dec — преобразование из двоичной системы счисления в десятичную
  • oct2dec — преобразование из восьмеричной системы счисления в десятичную
  • hex2dec — преобразование из шестнадцатеричной системы счисления в десятичную

История

ВерсияОписание
5.5.0 Введена опция decimalseparator (SEP 97).
5.4.1 Если str не содержит никаких числовых значений, то теперь d возвращает Nan вместо 0.
Report an issue
<< strsubst Строки strtok >>

Copyright (c) 2022-2023 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Feb 14 15:13:26 CET 2017