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
duration values, which can be treated like numeric 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
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.
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 cannot convert text to a number, then it returns a
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
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
str2doublefunction. It treats string arrays, character vectors, and cell arrays of character vectors consistently.
You can also use the
doublefunction for string arrays. However, it treats character vectors differently.
str2num. It calls the
evalfunction which can have unintended consequences.
Hexadecimal and Binary Values
You can represent hexadecimal and binary numbers as text or as literals. When you write them as literals, you must use the
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
D = bin2dec('101010')
D = 42
D = bin2dec('0b101010')
D = 42
Dates and Times
MATLAB provides the
duration data types to store dates and times, and to treat them as numeric values. To convert text representing dates and times, use the
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
D = duration('12:34:56')
D = duration 12:34:56