數(shù)字

2018-02-24 16:03 更新

小心地測試浮點(diǎn)數(shù)的相等性

在計(jì)算中過度相信 IEEE 浮點(diǎn)數(shù)是一種錯誤。例如:

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.

這樣的結(jié)果是由于這個(gè)事實(shí):?0.2?(1/5) 在 IEEE 空間無法被表示為二進(jìn)制分?jǐn)?shù)。

因此,如果你想要檢查浮點(diǎn)數(shù)的相等性,那么可以使用?sprintf?或類似 的東東。

參閱?http://perldoc.perl.org/perlfaq4.html?了解細(xì)節(jié)。

數(shù)字舍入

不要使用?int()?來做數(shù)字舍入,它只會返回整數(shù)部分。sprintf()?或?printf()?一般夠用了。

printf("%.3f", 3.1415926535);   # prints 3.142

如果你需要向下或向上舍入,那么可以使用?POSIX?模塊所提供的?ceil()?和?floor()函數(shù)。其中,ceil()?是向上舍入,而?floor()?是向下舍入。

use POSIX;
my $ceil   = ceil(3.5);   # 4
my $floor  = floor(3.5);  # 3
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號