将文本转换为数值

此示例说明如何将文本转换为它所表示的数值。通常,当有表示要绘制或在计算中使用的数字的文本时,需要执行这种转换。例如,文本可能来自文本文件或电子表格。如果在将其导入 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

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 会将单个字符转换为表示其 Unicode® 值的数字。

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

然后使用 hex2dec 函数转换表示相同值的文本。它能识别前缀,但不要求一定有前缀。

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

使用 bin2dec 函数转换表示二进制值的文本。

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

日期时间

MATLAB 提供 datetime duration 数据类型来存储日期时间,并将其视为数值。要转换表示日期时间的文本,请使用 datetime duration 函数。

将表示日期的文本转换为 datetime 值。 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')