MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中使用sprintf显示变量的小数 (https://www.labfans.com/bbs/showthread.php?t=24134)

poster 2019-12-10 20:48

在MATLAB中使用sprintf显示变量的小数
 
我不明白使用[URL="http://www.mathworks.se/help/techdoc/ref/sprintf.html"]sprintf[/URL]命令会发生的下一件事。

>> vpa(exp(1),53) ans = 2.7182818284590455348848081484902650117874145507812500 >> e = 2.7182818284590455348848081484902650117874145507812500 e = 2.7183 >> sprintf('%0.53f', e) ans = 2.71828182845904550000000000000000000000000000000000000 为什么sprintf告诉我数e四舍五入,而不是数量和我保持在首位?



[B]回答:[/B]

在MATLAB中,变量[I]默认[/I]为[URL="http://en.wikipedia.org/wiki/Double_precision_floating-point_format"]double precision[/URL] ,因此您创建的变量e限于double的精度,大约为16位。即使您输入了更多的数字,双精度也不能精确地表示所有这些多余的数字,并四舍五入到它可以表示的最接近的数字。

[B]编辑:[/B]正如[URL="https://stackoverflow.com/questions/4227145/in-matlab-are-variables-really-double-precision-by-default/4227530#4227530"]安德鲁·詹克[/URL] ( [URL="https://stackoverflow.com/questions/4227145/in-matlab-are-variables-really-double-precision-by-default/4227530#4227530"]Andrew Janke)[/URL]在回答我发布的[URL="https://stackoverflow.com/questions/4227145/in-matlab-are-variables-really-double-precision-by-default"]后续问题[/URL]时更详细地解释的那样,您为e选择的e恰好是二进制值的精确十进制扩展。换句话说,它是附近浮点数将四舍五入到的可精确表示的值。但是,在这种情况下,小数点后超过16位的任何数字都不会被认为是有效的,因为它不能真正由双精度类型准确表示。因此,像[URL="http://www.mathworks.com/help/techdoc/ref/sprintf.html"]SPRINTF[/URL]这样的[URL="http://www.mathworks.com/help/techdoc/ref/sprintf.html"]函数[/URL]将自动忽略这些较小的值,而是打印零。



[url=https://stackoverflow.com/questions/4222257]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 22:43

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.