我尝试使用num2str
或sprintf
将数值转换为字符串或字符。我不明白为什么输出和我的输入是不同的?我希望输出与输入相同。
s=num2str(180814132242864695,'%18d')
s = 180814132242864704 % this is the output
s = sprintf('%18d',180814132242864695)
s = 180814132242864704
发布于 2018-08-15 06:00:47
MATLAB将所有数字文字解释为双精度浮点数。问题不在于到字符串的转换,而在于当转换到内存中时,值180814132242864695
变成了可以用64位浮点精度表示的最接近的值,因此浮点精度就是180814132242864704
。
一般来说,如果您处理的数字需要超过52位的精度才能表示(例如大于2^53 - 1 = 9007199254740991 ~ 9e15
的整数),那么您将开始遇到精度问题。
示例:
>> 9007199254740992 == 9007199254740993
ans =
logical
1
Luis Mendo Why is 24.0000 not equal to 24.0000 in MATLAB?链接的答案给出了MATLAB (和大多数语言)所使用的浮点表示的更详细的描述。
https://stackoverflow.com/questions/51850064
复制相似问题