而不是printf我将输出写入文件,但它仍然将output1作为2。
my $ramount = 2.01;
$ramount = int($ramount*100)/100;
printf "output1: $ramount";
答案 0 :(得分:6)
我认为这个序列会回答你的问题:
DB<1> $a=2.01
DB<2> p $a
2.01
DB<3> printf "%20.10f\n", $a
2.0100000000
DB<4> printf "%20.16f\n", $a
2.0099999999999998
DB<5> printf "%20.16f\n", ($a*100)
200.9999999999999716
DB<6> printf "%20.16f\n", ($a*100)/100
2.0099999999999998
DB<7> printf "%20.16f\n", int($a*100)
200.0000000000000000
DB<8> printf "%20.16f\n", int($a*100)/100
2.0000000000000000
DB<9>
基本上(这已在SO上多次回答),2.01不能完全表示为浮点数。如上所示,最接近的浮点数是2.009999999999999716 ......
关于填充,请尝试
printf "%04d", $number
格式中的前导零告诉printf
(或sprintf
)左边的零点。
答案 1 :(得分:1)
为什么int()坏了?
你的
int()
很可能正常工作。这是数字 不是你的想法。首先,请参阅"Why am I getting long decimals (eg, 19.9499999999999) instead of the numbers I should be getting (eg, 19.95)?"的答案。例如,这个
print int(0.6/0.2-2), "\n";
将在大多数计算机上打印0,而不是1,因为即使这样简单 数字为0.6和0.2不能用浮点精确表示 数字。你认为上面的“三个”真的更像是 2.9999999999999995559。