将数值转换为字符向量时未获得预期结果
Not getting expected result when converting numeric value to character vector
我正在尝试使用 num2str
或 sprintf
将数值转换为字符串或字符。我不明白为什么输出与我的输入不同?我希望输出与输入相同。
s=num2str(180814132242864695,'%18d')
s = 180814132242864704 % this is the output
s = sprintf('%18d',180814132242864695)
s = 180814132242864704
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(和大多数语言)使用的浮点表示法。
我正在尝试使用 num2str
或 sprintf
将数值转换为字符串或字符。我不明白为什么输出与我的输入不同?我希望输出与输入相同。
s=num2str(180814132242864695,'%18d')
s = 180814132242864704 % this is the output
s = sprintf('%18d',180814132242864695)
s = 180814132242864704
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(和大多数语言)使用的浮点表示法。