如何在Perl中将指数数字格式更改为浮点格式

时间:2011-12-21 11:04:58

标签: perl

我在Perl中有一个包含一个小数字的字符串: $ num =“0.00000001”;

当我对它进行数值运算时,它将成为指数格式的数字: $ num = $ num * 100; 打印“$ num \ n”;

结果是:1e-06

问题是, 如何以浮点格式打印此数字,即0.000001。

我知道我可以使用sprintf(“%。6f”,$ num)为特定号码执行此操作, 但我想要一个通用的解决方案, 所以我不必每次都确定小数点后显示多少位数 (如上面的sprintf示例中的6)

2 个答案:

答案 0 :(得分:5)

将数值运算应用于$num时,它将成为浮点数。 1e-060.000001是该数字的文字表示;存储的值不区分它们。

如果您只是打印或字符串化数字,它会使用默认格式,正如您所见,它会生成"1e-06"。使用格式为sprintf的{​​{1}}会给您一个合理的结果; "%f"会产生sprintf("%f", $num)

"0.000001"格式可能会丢失信息。例如:

"%f"

打印:

$num = "0.00000001";
printf("%f\n", $num);

您说要打印而不必每次确定小数点后显示的位数。 某些东西必须做出这样的决定,并且没有普遍正确的方法来做到这一点。显而易见的事情是打印有效数字,省略尾随零,但这会带来一些问题。您为0.000000 打印了多少位数,其十进制表示具有无限序列1.0/3.0 s?并且3无法在二进制浮点中精确表示:

0.00000001

打印:

$num = "0.00000001";
printf("%f\n", $num);    
printf("%.78f\n", $num);

答案 1 :(得分:4)

使用rodents of unusual size

$ perl -Mbigrat -E'$num = 0.00000001; $num *= 100; say $num'
0.000001