将数字字符串转换为具有特定精度的浮点数(不会出现舍入错误)

时间:2017-11-02 12:23:15

标签: matlab floating-point

我有一个单元格的矢量(比如,50x1的大小,称为tokens),每个都是一个结构,其属性为xf1,{{ 1}}是表示数字的字符串。例如,f2给出:

tokens{15}

我试图将这些数字放入3个向量(每个也是x: "-1.4343429" f1: "15.7947111" f2: "-5.8196158" ),其类型为50x1。所以我创建了3个向量:

float

并且工作正常(为什么不呢?)。但是当我尝试填充这些向量时:(x = zeros(50,1,'single'); f1 = zeros(50,1,'single'); f2 = zeros(50,1,'single'); L循环索引)

for

我明白了:

  

从字符串转换为单个时发生以下错误:   无法从字符串转换为单个字符串。

我能理解;隐式转换不适用于x(L)=tokens{L}.x; .. also for the other 2 。如果singlexf1的类型为f2,则会有效。

我使用浮点数的原因是因为我得到的数据来自一个C程序,它将一些浮点数写入一个文件以供matlab读取。如果我尝试将值转换为C程序中的双精度值,我会得到四舍五入的错误......

所以,(在我希望是一个好问题之后),我怎样才能以正确的精度获取这些字符串中的数字?(所有字符串都具有相同的数字小数位:7)。

MCVE:

50x1 double

1 个答案:

答案 0 :(得分:2)

在分配到您的数组之前使用函数str2double(如果需要,然后将其转换为单个)。在将字符串(字符数组)用作数字之前,它们必须明确地转换为数字。