Преобразуйте текст в числовые значения

В этом примере показано, как преобразовать текст в числовые значения, которые он представляет. Как правило, необходимо выполнить такие преобразования, когда у вас есть текст, который представляет числа, которые будут строиться или использоваться в вычислениях. Например, текст может прибыть из текстового файла или электронной таблицы. Если вы уже не преобразовали его в числовые значения при импорте его в MATLAB®, можно использовать функции, показанные в этом примере.

Можно преобразовать строковые массивы, векторы символов и массивы ячеек из символьных векторов к числовым значениям. Текст может представлять шестнадцатеричные или двоичные значения, хотя, когда вы преобразуете их в числа, они хранятся как десятичные значения. Можно также преобразовать текст, представляющий даты и время к datetime или duration значения, которые могут быть обработаны как числовые значения.

Значения с двойной точностью

Рекомендуемый способ преобразовать текст в значения с двойной точностью состоит в том, чтобы использовать str2double функция. Это может преобразовать векторы символов, строковые массивы и массивы ячеек из символьных векторов.

Например, создайте вектор символов с помощью одинарных кавычек и преобразуйте его в номер, который он представляет.

X = str2double('3.1416')
X = 3.1416

Если входной параметр является массивом строк или массивом ячеек из символьных векторов, то str2double преобразует его в числовой массив, имеющий тот же размер. Можно создать строки с помощью двойных кавычек. (Строки имеют string тип данных, в то время как векторы символов имеют char тип данных.

str = ["2.718","3.1416";
       "137","0.015"]
str = 2x2 string
    "2.718"    "3.1416"
    "137"      "0.015" 

   X = str2double(str)
X = 2×2

    2.7180    3.1416
  137.0000    0.0150

str2double функция может преобразовать текст, который включает запятые (как тысячи диафрагм) и десятичные точки. Например, можно использовать str2double преобразовывать Balance переменная в приведенной ниже таблице. Balance представляет числа как строки, с помощью запятой в качестве тысяч диафрагмы.

load balances
balances
balances=3×2 table
    Customer       Balance  
    _________    ___________

    "Diaz"       "13,790.00"
    "Johnson"    "2,456.10" 
    "Wu"         "923.71"   

T.Balance = str2double(T.Balance)
T=3×2 table
    Customer     Balance
    _________    _______

    "Diaz"        13790 
    "Johnson"    2456.1 
    "Wu"         923.71 

Если str2double не может преобразовать текст в номер, затем он возвращает NaN значение.

В то время как str2num функция может также преобразовать текст в числа, это не рекомендуется. str2num использует eval функция, которая может вызвать непреднамеренные побочные эффекты, когда ввод текста включает имя функции. Чтобы избежать этих проблем, используйте str2double.

Как альтернатива, можно преобразовать строки в значения с двойной точностью с помощью double функция. Если вход является массивом строк, то double возвращает числовой массив, который имеет тот же размер, так же, как str2double делает. Однако, если вход является вектором символов, то double преобразует отдельные символы в числа, представляющие их значения Unicode.

X = double("3.1416")
X = 3.1416
X = double('3.1416')
X = 1×6

    51    46    49    52    49    54

Этот список обобщает лучшие практики для преобразования текста к числовым значениям.

  • Чтобы преобразовать текст в числовые значения, используйте str2double функция. Это последовательно обрабатывает строковые массивы, векторы символов и массивы ячеек из символьных векторов.

  • Можно также использовать double функция для строковых массивов. Однако это обрабатывает векторы символов по-другому.

  • Избегайте str2num. Это вызывает eval функция, которая может иметь непреднамеренные последствия.

Шестнадцатеричные и двоичные значения

Можно представлять шестнадцатеричные и двоичные числа как текст или как литералы. Когда вы пишете им как литералы, необходимо использовать 0x и 0b префиксы. Когда вы представляете их как текст и затем преобразуете их, можно использовать префиксы, но они не требуются.

Например, запишите шестнадцатеричный номер как литерал. Префикс требуется.

D = 0x3FF
D = uint16
    1023

Затем преобразуйте текст, представляющий то же значение при помощи hex2dec функция. Это распознает префикс, но не требует его.

D = hex2dec('3FF')
D = 1023
D = hex2dec('0x3FF')
D = 1023

Преобразуйте текст, представляющий двоичные значения с помощью bin2dec функция.

D = bin2dec('101010')
D = 42
D = bin2dec('0b101010')
D = 42

Даты и времена

MATLAB обеспечивает datetime и duration типы данных, чтобы сохранить даты и времена и обработать их как числовые значения. Чтобы преобразовать текст, представляющий даты и времена, используйте datetime и duration функции.

Преобразуйте текст, представляющий дату datetime значение. datetime функция распознает много распространенных форматов в течение многих дат и времен.

C = '2019-09-20'
C = 
'2019-09-20'
D = datetime(C)
D = datetime
   20-Sep-2019

Можно преобразовать массивы, представляющие даты и времена.

str = ["2019-01-31","2019-02-28","2019-03-31"]
str = 1x3 string
    "2019-01-31"    "2019-02-28"    "2019-03-31"

D = datetime(str)
D = 1x3 datetime
   31-Jan-2019   28-Feb-2019   31-Mar-2019

Если вы преобразуете текст в duration значения, затем используйте hh:mm:ss или dd:hh:mm:ss ' format ' .

D = duration('12:34:56')
D = duration
   12:34:56

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

| | | | | |

Похожие темы