exponenta event banner

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

В этом примере показано, как преобразовать текст в числовые значения, которые он представляет. Как правило, такие преобразования необходимо выполнять при наличии текста, представляющего числа для печати или использования в расчетах. Например, текст может быть получен из текстового файла или электронной таблицы. Если он еще не преобразован в числовые значения при импорте в 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 преобразует отдельные символы в числа, представляющие их значения в Юникоде.

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 форматы.

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

См. также

| | | | | |

Связанные темы