数字
最后更新于:2022-04-01 21:07:05
## 小心地测试浮点数的相等性
在计算中过度相信 IEEE 浮点数是一种错误。例如:
~~~
print "---\n";
print "A: ", 2.4, "\n";
print "B: ", 0.2*12, "\n";
if ( 0.2*12 == 2.4 ) {
print "These are equal.\n";
}
else {
print "These are not equal.\n";
}
A: 2.4
B: 2.4
These are not equal.
~~~
这样的结果是由于这个事实: _0.2_ (1/5) 在 IEEE 空间无法被表示为二进制分数。
因此,如果你想要检查浮点数的相等性,那么可以使用 `sprintf` 或类似 的东东。
参阅 [http://perldoc.perl.org/perlfaq4.html](http://perldoc.perl.org/perlfaq4.html) 了解细节。
## 数字舍入
不要使用 `int()` 来做数字舍入,它只会返回整数部分。`sprintf()` 或 `printf()` 一般够用了。
~~~
printf("%.3f", 3.1415926535); # prints 3.142
~~~
如果你需要向下或向上舍入,那么可以使用 [POSIX](https://metacpan.org/module/POSIX) 模块所提供的 `ceil()` 和 `floor()`函数。其中,`ceil()` 是向上舍入,而 `floor()` 是向下舍入。
~~~
use POSIX;
my $ceil = ceil(3.5); # 4
my $floor = floor(3.5); # 3
~~~
';