在平時若是有人問你0.1+0.2=?的問題,你可能會鄙視他,但在計算機中這倒是一個比較頭疼的問題,先看一個例子:java
結果是多少?python
答案是:
編程
沒錯,爲何不是指望的0.3呢?編程語言
先不說爲何,先看看在別的編程語言中的一樣的狀況:spa
在java中:.net
在python中:3d
爲何呢?blog
咱們知道,計算機中存儲的都是二進制的0和1,而咱們現實中的數存入計算機中轉換爲二進制時有可能不能整除,也就是不能正好整除,因此用二進制表示現實中的數並計算就產生了偏差。bfc
把十進制的0.1和0.2轉換爲二進制:循環
0.1 => 0.0001 1001 1001 1001…(1001無限循環)
0.2 => 0.0011 0011 0011 0011…(0011無限循環)
可是咱們計算機的硬件存儲的位數是有限制的不可能無限循環下去,通常雙精度浮點數總共佔用64位,其中最多53位爲有效精度數字(包括符號位),因此存儲時:
0.1=>0.0001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001
0.2=>0.0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011
0.1+0.2=>
0.0100 1100 1100 1100 1100 1100 11001 100 1100 1100 1100 1100 1100
轉換爲十進制就是:0.30000000000000004
參考:http://blog.csdn.net/zcczcw/article/details/7362473