在MATLAB中使用sprintf显示变量的小数

时间:2010-11-19 05:07:09

标签: variables matlab printf decimal

我不明白使用sprintf命令发生的下一件事。

>> vpa(exp(1),53)

ans =

2.7182818284590455348848081484902650117874145507812500


>> e = 2.7182818284590455348848081484902650117874145507812500

e =

2.7183

>> sprintf('%0.53f', e)

ans =

2.71828182845904550000000000000000000000000000000000000

为什么sprintf向我显示数字e四舍五入而不是数字,我保留在第一位?

1 个答案:

答案 0 :(得分:5)

MATLAB中的变量默认为double precision ,因此您创建的变量e限制为double的精度,大约为16位。即使你输入了更多的数字,双精度也没有准确表示所有这些额外数字的精度,并且四舍五入到它可以代表的最接近的数字。

编辑:正如Andrew Janke在我发布的this follow-up question回复中更详细解释的那样,您为e选择的数字恰好是二进制值的精确十进制扩展。换句话说,它是附近浮点数可以舍入到的精确可表示的值。但是,在这种情况下,超过小数点后大于16位的任何内容都不会被认为是重要的,因为它无法通过双精度类型精确表示。因此,像SPRINTF这样的函数会自动忽略这些小值,而不是打印零。