数字

最后更新于: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 ~~~
';