此示例说明如何将文本转换为它所表示的数值。通常,当有表示要绘制或在计算中使用的数字的文本时,需要执行这种转换。例如,文本可能来自文本文件或电子表格。如果在将其导入 MATLAB® 时,您尚未将其转换为数值,则您可以使用此示例中所示的函数。
您可以将字符串数组、字符向量和字符向量元胞数组转换为数值。文本可以表示十六进制或二进制值,但当您将它们转换为数字时,它们会存储为十进制值。您还可以将表示日期时间的文本转换为
datetime
或
duration
值,这些值可视为数值。
双精度值
将文本转换为双精度值的推荐方法是使用
str2double
函数。它可以转换字符向量、字符串数组和字符向量元胞数组。
例如,使用单引号创建字符向量,并将其转换为它所表示的数字。
如果输入参量是字符串数组或字符向量元胞数组,则
str2double
将其转换为大小相同的数值数组。您可以使用双引号创建字符串。(字符串具有
string
数据类型,而字符向量具有
char
数据类型。)
str = 2x2 string
"2.718" "3.1416"
"137" "0.015"
X = 2×2
2.7180 3.1416
137.0000 0.0150
str2double
函数可以转换包含逗号(作为千位分隔符)和小数点的文本。例如,您可以使用
str2double
来转换下表中的
Balance
变量。
Balance
将数字表示为字符串,使用逗号作为千位分隔符。
balances=3×2 table
Customer Balance
_________ ___________
"Diaz" "13,790.00"
"Johnson" "2,456.10"
"Wu" "923.71"
T=3×2 table
Customer Balance
_________ _______
"Diaz" 13790
"Johnson" 2456.1
"Wu" 923.71
如果
str2double
不能将文本转换为数值,则它将返回
NaN
值。
虽然
str2num
函数也可以将文本转换为数字,但
不
推荐使用。
str2num
使用
eval
函数,这可能在文本输入包含函数名称时产生意外的副作用。为了避免这些问题,请使用
str2double
。
您也可以使用
double
函数将字符串转换为双精度值。如果输入是字符串数组,则
double
将返回大小相同的数值数组,就像
str2double
一样。但是,如果输入是字符向量,则
double
会将单个字符转换为表示其 Unicode® 值的数字。
X = 1×6
51 46 49 52 49 54
以下列表总结了将文本转换为数值的最佳做法。
-
要将文本转换为数值,请使用
str2double
函数。它以一致的方式处理字符串数组、字符向量和字符向量元胞数组。
-
您还可以对字符串数组使用
double
函数。然而,它对字符向量的处理不同。
-
避免
使用
str2num
。它调用
eval
函数,这可能会产生意外的结果。
十六进制和二进制值
您可以将十六进制和二进制数字表示为文本或
字面值
。当您将它们写为字面值时,必须使用
0x
和
0b
前缀。当您将它们表示为文本然后进行转换时,您可以使用前缀,但前缀不是必需的。
例如,将十六进制数字写为字面值。前缀是必需的。
然后使用
hex2dec
函数转换表示相同值的文本。它能识别前缀,但不要求一定有前缀。
使用
bin2dec
函数转换表示二进制值的文本。
日期时间
MATLAB 提供
datetime
和
duration
数据类型来存储日期时间,并将其视为数值。要转换表示日期时间的文本,请使用
datetime
和
duration
函数。
将表示日期的文本转换为
datetime
值。
datetime
函数可以识别许多常见的日期时间格式。
您可以转换表示日期时间的数组。
str = 1x3 string
"2019-01-31" "2019-02-28" "2019-03-31"
D = 1x3 datetime
31-Jan-2019 28-Feb-2019 31-Mar-2019
如果您将文本转换为
duration
值,请使用
hh:mm:ss
或
dd:hh:mm:ss
格式。