計算機浮點問題,用round處理一下就行了,詳情可以往下看。
單元格中輸入“=12-11.7”,返回的結果不是0.3,而是0.300000000000001
單元格中輸入“=(43.1-43.2)+1”,返回的結果不是0.9,而是0.899999999999999
單元格中輸入“55556.848”,會自動變成55556.8479999999
這麼強大的Excel,居然連一些簡單的加減法都計算不正確。
這是什麼原因造成的呢?大家都知道,計算機採用的是二進位制,以二進位制儲存浮點數時,會引起一個混亂的問題是,某些 10 進位制的有窮非迴圈數在二進位制下是無窮的迴圈數。這方面最常見的示例是值 0.1 及其變體。雖然這些數字在以 10 為底的情況下可以完美地得到表示,但二進位制格式下的相同數字在尾數中儲存時就變成了以下二進位制迴圈數字:000110011001100110011(等類似數字)
Excel會在在尾數中儲存能夠容納的部分,並截斷其餘部分。這導致在儲存數字時產生較小的誤差。
在二進位制下,即使是常見的十進位制分數(例如十進位制的 0.0001)也無法得到準確表示。(0.0001 是一個二進位制迴圈分數,以 104 位為一個週期)。這類似於為什麼分數 1/3 在十進位制下無法得到準確的表示(迴圈小數 0.33333333333333333333)。
這個問題怎麼解決呢?
由於造成的誤差非常小,大多數境況下是不需要處理的,如果要處理,有下面兩個方法。
方法1:使用ROUND函式保留小數位數
方法2:設定Excel已顯示精度為準
可在“檔案”→“選項”→“高階”中可設定。
但是我並不推薦使用第二種方法的設定,例如,如果選擇顯示兩位小數的數字格式,然後開啟“以顯示精度為準”選項,在你儲存工作簿時,所有超出兩位小數的精度都將會丟失。此選項影響活動的工作簿(包括所有工作表)。而且還無法撤消此選項和恢復丟失的資料。
計算機浮點問題,用round處理一下就行了,詳情可以往下看。
單元格中輸入“=12-11.7”,返回的結果不是0.3,而是0.300000000000001
單元格中輸入“=(43.1-43.2)+1”,返回的結果不是0.9,而是0.899999999999999
單元格中輸入“55556.848”,會自動變成55556.8479999999
這麼強大的Excel,居然連一些簡單的加減法都計算不正確。
這是什麼原因造成的呢?大家都知道,計算機採用的是二進位制,以二進位制儲存浮點數時,會引起一個混亂的問題是,某些 10 進位制的有窮非迴圈數在二進位制下是無窮的迴圈數。這方面最常見的示例是值 0.1 及其變體。雖然這些數字在以 10 為底的情況下可以完美地得到表示,但二進位制格式下的相同數字在尾數中儲存時就變成了以下二進位制迴圈數字:000110011001100110011(等類似數字)
Excel會在在尾數中儲存能夠容納的部分,並截斷其餘部分。這導致在儲存數字時產生較小的誤差。
在二進位制下,即使是常見的十進位制分數(例如十進位制的 0.0001)也無法得到準確表示。(0.0001 是一個二進位制迴圈分數,以 104 位為一個週期)。這類似於為什麼分數 1/3 在十進位制下無法得到準確的表示(迴圈小數 0.33333333333333333333)。
這個問題怎麼解決呢?
由於造成的誤差非常小,大多數境況下是不需要處理的,如果要處理,有下面兩個方法。
方法1:使用ROUND函式保留小數位數
方法2:設定Excel已顯示精度為準
可在“檔案”→“選項”→“高階”中可設定。
但是我並不推薦使用第二種方法的設定,例如,如果選擇顯示兩位小數的數字格式,然後開啟“以顯示精度為準”選項,在你儲存工作簿時,所有超出兩位小數的精度都將會丟失。此選項影響活動的工作簿(包括所有工作表)。而且還無法撤消此選項和恢復丟失的資料。