%% 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')

%
% 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"]
   X = str2double(str)

%
% 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.

load balances
balances

%

T.Balance = str2double(T.Balance)

%
% 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 = double('3.1416')

%
% 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.
%
%% 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 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

%
% 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 = hex2dec('0x3FF')

%
% Convert text representing binary values using the bin2dec function.

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

%
%% 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'
D = datetime(C)

%
% You can convert arrays representing dates and times.

str = ["2019-01-31","2019-02-28","2019-03-31"]
D = datetime(str)

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

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

% Copyright 2019 The MathWorks, Inc.