Convert Text to Numeric Values

This example shows how to convert text to the numeric values that it represents. Typically, you need to perform such conversions when you have text that represents numbers to be plotted or used in calculations. For example, the text might come from a text file or spreadsheet. If you did not already convert it to numeric values when importing it into MATLAB®, you can use the functions shown in this example.

You can convert string arrays, character vectors, and cell arrays of character vectors to numeric values. Text can represent hexadecimal or binary values, though when you convert them to numbers they are stored as decimal values. You can also convert text representing dates and time to datetime or duration values, which can be treated like numeric values.

Double-Precision Values

The recommended way to convert text to double-precision values is to use the str2double function. It can convert character vectors, string arrays, and cell arrays of character vectors.

For example, create a character vector using single quotes and convert it to the number it represents.

X = str2double('3.1416')
X = 3.1416

If the input argument is a string array or cell array of character vectors, then str2double converts it to a numeric array having the same size. You can create strings using double quotes. (Strings have the string data type, while character vectors have the char data type.)

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 function can convert text that includes commas (as thousands separators) and decimal points. For example, you can use str2double to convert the Balance variable in the table below. Balance represents numbers as strings, using a comma as the thousands separator.

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

If str2double cannot convert text to a number, then it returns a NaN value.

While the str2num function can also convert text to numbers, it is not recommended. str2num uses the eval function, which can cause unintended side effects when the text input includes a function name. To avoid these issues, use str2double.

As an alternative, you can convert strings to double-precision values using the double function. If the input is a string array, then double returns a numeric array that has the same size, just as str2double does. However, if the input is a character vector, then double converts the individual characters to numbers representing their Unicode values.

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

51    46    49    52    49    54

This list summarizes the best practices for converting text to numeric values.

• To convert text to numeric values, use the str2double function. It treats string arrays, character vectors, and cell arrays of character vectors consistently.

• You can also use the double function for string arrays. However, it treats character vectors differently.

• Avoid str2num. It calls the eval function which can have unintended consequences.

You can represent hexadecimal and binary numbers as text or as literals. When you write them as literals, you must use the 0x and 0b prefixes. When you represent them as text and then convert them, you can use the prefixes, but they are not required.

For example, write a hexadecimal number as a literal. The prefix is required.

D = 0x3FF
D = uint16
1023

Then convert text representing the same value by using the hex2dec function. It recognizes the prefix but does not require it.

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

Convert text representing binary values using the bin2dec function.

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

Dates and Times

MATLAB provides the datetime and duration data types to store dates and times, and to treat them as numeric values. To convert text representing dates and times, use the datetime and duration functions.

Convert text representing a date to a datetime value. The datetime function recognizes many common formats for dates and times.

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

You can convert arrays representing dates and times.

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

If you convert text to duration values, then use the hh:mm:ss or dd:hh:mm:ss formats.

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