从perlfaq4对 Perl 是否有 round() 函数的回答?ceil() 和 floor() 呢?三角函数?
:
请记住,int() 只是向 0 截断。对于四舍五入到特定位数, sprintf() 或 printf() 通常是最简单的方法。
printf("%.3f", 3.1415926535); # prints 3.142
POSIX 模块(标准 Perl 发行版的一部分)实现了 ceil()、floor() 和许多其他数学和三角函数。
use POSIX;
$ceil = ceil(3.5); # 4
$floor = floor(3.5); # 3
在 5.000 到 5.003 perls 中,三角函数是在 Math::Complex 模块中完成的。在 5.004 中,Math::Trig 模块(标准 Perl 发行版的一部分)实现了三角函数。它在内部使用 Math::Complex 模块,并且一些函数可以从实轴分解到复平面,例如 2 的反正弦。
金融应用程序中的四舍五入可能会产生严重影响,并且应精确指定所使用的四舍五入方法。在这些情况下,不信任 Perl 使用的任何系统舍入可能是值得的,而是自己实现所需的舍入功能。
要了解原因,请注意在中途交替时您仍然会遇到问题:
for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
0.8 0.8 0.9 0.9 1.0 1.0
Don't blame Perl. It's the same as in C. IEEE says we have to do this. Perl numbers whose absolute values are integers under 2**31 (on 32 bit machines) will work pretty much like mathematical integers. Other numbers are not guaranteed.