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

标签 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 而不是我保留在第一位的数字?

最佳答案

变量是 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/

相关文章:

从 char 到 int 的转换并打印十进制值

c - 有没有办法修复 stdint 类型的格式说明符警告?

matlab - 如何创建直方图的直方图?

matlab - 如何将图像写入文件

javascript - xpages - 如何从客户端 javascript 设置范围变量?

javascript - Runscope 在每个请求之前初始化时间戳变量

matlab - 获取逻辑向量中的最后 x 个项(为真)

c - 自复制程序

python按名称获取模块变量

vb.net - 在 VB.net 中动态声明变量