将数值转换为字符向量时未得到预期的结果

时间:2018-08-14 21:32:45

标签: matlab ieee-754

我正在尝试使用num2strsprintf将数字值转换为字符串或字符。我不明白为什么输出与输入不同?我希望输出与输入相同。

s=num2str(180814132242864695,'%18d')

s = 180814132242864704  % this is the output

s = sprintf('%18d',180814132242864695)
s = 180814132242864704

1 个答案:

答案 0 :(得分:3)

MATLAB将所有数字文字解释为双精度浮点数。问题不在于转换为字符串,而在于以下事实:当转换为内存时,值180814132242864695变为最接近的值,可以用64位浮点精度表示,因此精度为{{1} }。

通常来说,如果您要使用需要超过52位精度来表示的数字(例如,大于180814132242864704的整数),您将开始遇到精度问题。

示例:

2^53 - 1 = 9007199254740991 ~ 9e15

Luis Mendo Why is 24.0000 not equal to 24.0000 in MATLAB?链接的答案给出了MATLAB(和大多数语言)使用的浮点表示的更详细描述。