<?php echo 199.8 + 0.9 -200.7; //expect 0, result 2.8421709430404E-14 ? ?>
PHP加法減法操作,而不是精確的結果
測試在PHP版本5.3.2-1 ubuntu4.7
<?php echo 199.8 + 0.9 -200.7; //expect 0, result 2.8421709430404E-14 ? ?>
PHP加法減法操作,而不是精確的結果
測試在PHP版本5.3.2-1 ubuntu4.7
空間有限,分數浮動的一些值(只是以同樣的方式點is inaccurate那,用十進制表示法,你不能在有限空間中寫出1/3
)。
2.8421709430404E-14
非常接近於0。
圓形,或將其輸出到一定數量的顯著數字。
這裏有一些http://www.php.net/manual/en/ref.bc.php確切的例子:
<?php
$a = 199.8;
$b = 0.9;
$c = 200.7;
// set precision
bcscale(1);
$ab = bcadd($a, $b);
echo bcsub($ab, $c); // result 0.0
?>
測試與PHP 5.3.3-7 + squeeze1 Debian的擠壓
回答評論,但是如果大於precoding示例,則應用bcadd會給出錯誤的值 $ precision = ini_get('precision')+ 2; (1/$ precision + pow(10,$ precision)); //正常添加將返回正確的數字,但沒有浮點數,返回1.0E + 16 但使用bc函數 bcadd(1/$ precision,pow(10,$ precision)); //此處將返回零 我在[PHP手冊BC函數](http://www.php.net/manual/en/ref.bc.php)中查看示例並進行測試 – billoo 2011-06-15 11:09:25
您可以給出精度作爲最後一個參數,或者用bcscale全局設置它。還有一個bcpow。哪裏有問題?啊好吧...爲了你可以編寫你自己的計算器的精度:對於分和添加你可以採取最長的精度。對於div和mult,您必須計算兩個精度。 – CSchulz 2011-06-15 11:09:36
確定子和添加和多我可以把一個特定的精度,因爲結果precission是已知的,但爲div的結果precission是未知的 – billoo 2011-06-15 11:14:41
有關於該[浮動PHP手冊頁]上一個很大的警示( http://php.net/manual/en/language.types.float.php),這被稱爲**浮點精度**。 – hakre 2011-06-15 10:41:52