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

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

The 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 значение. The 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

См. также

| | | | | |

Похожие темы