看一小段C語言程序:
int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*10); return 0; }
在你心目中, 變量 I 是怎樣的結果?
如果你理所當然地認為是3的話, 那么你就錯了~~~
實際結果應該是2. 為什么?
簡而言之, x在內存的值並不是精確的1.3, 實際上可能是1.29999999......
因為在計算機組成原因中有說過, 浮點數無法被准確地表示出來, 只能是一個非常精確的值..
就算現在你已經知道這個"坑"了, 但還是不小心會犯, 所以務必要牢記~~~
處理辦法:
1. 使用精度更高的double.
2. 取整之前四舍五入(加上一個非常小的0.00000.......005, 但要注意浮點數的精度范圍), 就像下面這樣.
int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*10+0.00005); return 0; }
同時也要值得注意的是, 這個四舍五入的操作只能用於取整的時候, 你不能加在原浮點值上面改變了原來的浮點數值.
女孩不哭 @ cnblogs.com/memset @ 2014-05-02