在进行“正确的数学计算”时,浮点效应会导致数字
0.1
变为 0.100000000000001
。
所以我想做一些“四舍五入”,但我不确定该怎么做:
当做类似
sprintf('%.3f', $val)
之类的事情时,将会有总是三个小数位,如0.100
。
对于具体示例,我可以使用格式 %.1f
,但是 0.1
只是 one 示例(也可以是 0.125
)。
我想要的是“最多三个小数位”(对于我的情况来说被认为是“足够”的精度)。 仅使用 Perl 核心包时,是否有比
print int($x * 1000) / 1000
更好的解决方案?
DB<1> $x=0.100000000000001
DB<2> print int($x * 1000) / 1000
0.1
DB<3>
print
不显示全部数字。参见:
my $x = 0.100000000000001
printf "%1.20f\n", int($x * 1000) / 1000;
输出:
0.10000000000000000555
要使用任意精度,请使用 Math::BigFloat,它是核心模块。
use Math::BigFloat;
my $x = 'Math::BigFloat'->new('0.100000000000001');