最近在一本書中看到作者指出 Excel 在運算上的問題。

如下圖,

若公式:=0.5-0.4-0.1,則結果是正確的。

但公式:=(0.5-0.4-0.1),則結果是錯誤的。

為何加了括號,結果就發生錯誤。

Excel-因為2進制轉換造成的運算錯誤

再觀察,公式:=(0.3-0.1-0.1-0.1),也是錯誤的。

但是,公式:=0.5-0.3-0.2和公式:=(0.5-0.3-0.2),是正確的。

這是因為在電腦中的運算是以二進制來運算的。

0.1:0.0001100110011001100110011001100…

0.4:0.0110011001100110011001100110011…

由上圖來看,小數轉換為二進制的結果可能是一個無窮的小數,所以 Excel 在運算=0.5-0.4-0.1時,結果為0是經過修正的結果。

而運算:=(0.5-0.4-0.1)時,因為括號內的結果先運算,因為不是最終結果,所以未被修正。不過,還好雖然結果未被修正,但是通常不影響計算結果,因為產生的誤差已經在有效位數之後了。

你想要自己產生小數的二進制數,可以參考下圖:

Excel-因為2進制轉換造成的運算錯誤

儲存格D2:=INT(D1*2/1)

儲存格E2:=D1*2-(D1*2>=1)

複製儲存格D2:E2,貼至儲存格D2:E56。

儲存格B2:="0."&CONCAT(D2:D32)

【參考資料】

image CONCAT 函數參考微軟提供的說明網頁:

學不完.教不停.用不盡文章列表

arrow
arrow
    文章標籤
    Excel 二進制 錯誤
    全站熱搜

    vincent 發表在 痞客邦 留言(0) 人氣()