我不明白接下来使用 sprintf 会发生什么命令。
>> vpa(exp(1),53)
ans =
2.7182818284590455348848081484902650117874145507812500
>> e = 2.7182818284590455348848081484902650117874145507812500
e =
2.7183
>> sprintf('%0.53f', e)
ans =
2.71828182845904550000000000000000000000000000000000000
为什么 sprintf
显示的是四舍五入的数字 e
而不是我保留在第一位的数字?
最佳答案
变量是 double precision 默认情况下 在 MATLAB 中,因此您创建的变量 e
被限制为 double ,大约 16 位数字。即使您输入了更多数字, double 也无法准确表示所有这些额外的数字,而是四舍五入到它可以表示的最接近的数字。
编辑: 正如 Andrew Janke 所详细解释的那样在他对 this follow-up question 的回答中我发布了,您为 e
选择的数字恰好是二进制值的精确十进制扩展。换句话说,它是附近的 float 将四舍五入到的可精确表示的值。但是,在这种情况下,任何超过小数点后大约 16 位的数字都不会被认为是重要的,因为它实际上不能用 double 类型准确表示。因此,类似 SPRINTF 的功能将自动忽略这些小值,而是打印零。
关于variables - 在 MATLAB 中使用 sprintf 显示变量的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222257/