perl 文档中哪里提到了 0.0001、0.00001 打印差异?

Dan*_*son 6 documentation perl

perl 文档中的哪里提到了何时将在这里获得指数格式?

$ perl -wle 'print for 0.001, 0.0001, 0.00001, 1.00001;'
0.001
0.0001
1e-05
1.00001
Run Code Online (Sandbox Code Playgroud)

不,我今天不是在谈论printf。它在哪里说“小于 0.0001 的数字会以不同的方式打印”之类的内容?

Sha*_*awn 10

它不是很清楚或容易找到,不是。您必须深入研究内部结构才能获得任何相关内容。

来自佩拉皮

Gconvert

该预处理器宏定义为将浮点数转换为不带尾随小数点的字符串。这模仿了 的行为sprintf("%g"),但有时效率更高。如果gconvert()不可用,但gcvt()删除尾随小数点,则gcvt()使用。sprintf("%g")如果其他方法都失败,则使用宏 using 。

perlnumber表示从本机浮点到十进制字符串的转换“涉及 C 编译器执行的步骤”,我认为这意味着前面提到的Gconvert。因此,您必须研究这些函数在系统上的行为方式,以获得有关何时在常规记数法和科学记数法之间切换以呈现数字的详细信息。

  • @Dan Jacobson,如果你想要一个通用的解决方案,那不是它。总是四舍五入到小数点后 22 位会导致问题。对于某些数字(例如 0.1)来说它可能太大,而对于其他数字则太小。数字可以有超过 22 位小数。事实上,最长小数形式的数字(IEEE 双精度数可以表示的最小数字)有 1074 位小数。这还不包括它为整数留下尾随“.”的事实,并且它不处理 +Inf、-Inf 和 NaN。 (2认同)