<?php
$a = 9.45*100;
var_dump($a);
var_dump(intval($a));
$a = 945*1.00;
var_dump($a);
var_dump(intval($a));
>運行結果如下:
float(945) int(944) float(945) int(945)
同是浮點 945 ,壹個轉成 944 壹個轉成 955
顯然簡單的十進制分數如同 0.1 或 0.7 不能在不丟失壹點點精度的情況下轉換為內部二進制的格式。這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999...。
這和壹個事實有關,那就是不可能精確的用有限位數表達某些十進制分數。例如,十進制的 1/3 變成了 0.3333333. . .。
所以永遠不要相信浮點數結果精確到了最後壹位,也永遠不要比較兩個浮點數是否相等。
也就是說 9.45*100 類似等於 944.9999
以上解釋希望能對妳有所幫助。。