如何将十进制数(浮点数)四舍五入到最接近的整数?
例如
1.2 = 1 1.7 = 2
的输出perldoc -q round
perldoc -q round
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 不要责怪 Perl。这与 C 中的相同。IEEE 说我们必须这样做。Perl 数字的绝对值是整数2**31(在 32 位机器上)将非常像数学整数一样工作。不保证其他数字。
Perl 有 round() 函数吗?ceil() 和 floor() 呢?三角函数?
请记住,int()仅向 截断0。用于四舍五入到一定位数,sprintf()或者printf()通常是最简单的方法。
int()
0
sprintf()
printf()
printf("%.3f", 3.1415926535); # prints 3.142
该POSIX模块(标准 Perl 发行版的一部分)实现 ceil()、floor()和许多其他数学和三角函数。
POSIX
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的反正弦。
Math::Complex
Math::Trig
金融应用程序中的四舍五入可能会产生严重影响,并且应精确指定所使用的四舍五入方法。在这些情况下,不信任 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
不要责怪 Perl。这与 C 中的相同。IEEE 说我们必须这样做。Perl 数字的绝对值是整数2**31(在 32 位机器上)将非常像数学整数一样工作。不保证其他数字。
2**31