EXCEL函數 INT

2012-02-11 1:17 pm
我發現以下公式給出的答案不正確,我想要答案1,但EXCEL給出0,表明INT是有些限制的,但我在說明中找不到解釋,請問該限制是甚麼從而導致這個0的錯誤結果﹖

=INT((10.1-10)*10)
更新1:

KF兄,其實我仲係唔係好明… 為何 (10.1-10) is evaluated as 0.0999...﹖這個只是好簡單的減數。如果說EXCEL應付不了這情形下的減數,為何公式改為=INT((1.1-1)*10),答案又能顯示正確的1﹖

回答 (3)

2012-02-11 3:23 pm
✔ 最佳答案
This is something to do with the precision of the floating point value of (10.1-10) as computed by Exel. Obviously, the value of (10.1-10) is evaluated as 0.0999... instead of 0.1. If you try

INT( (10.1-10+0.000000000000001)*10), you will get 1. The number 0.000000000000001, or 10^(-15), represents the precision error of Excel.

But, to my surprise, for a 32-bit machine (or computer if you like), the smallest floating point precision is 2^(-149), i.e. 1.4013 x 10^(-45), which is way smaller than the precision tolerance in Excel. This means Excel shouldn't be used for any high precision computations.
2012-02-11 9:24 pm
ANDY兄,用同一運算過程,為何公式改為=INT((1.1-1)*10) 不需將乘法展開都能正確顯示1﹖當中的分別只是如下,計算結果應沒有分別才對︰

10.1-10 = 0.1 (*10再INT後顯示0)
1.1-1 = 0.1 (*10再INT後顯示1)

照計INT的最終運算結果應一樣為1,兩者差別在那﹖

2012-02-11 16:49:25 補充:
ANDY兄,其實我發現呢個問題唔係偶然… 我從你之前答支票轉中文的知識+上發現的,LINK如下︰
http://hk.knowledge.yahoo.com/question/question?qid=7011021701271

你在補充欄裡給的函數式有用到INT((A1-INT(A1))*10),你試下輸入金額為10.1,你的金額轉換成中文顯示不了"壹角",這就是我這次提問的啟發點…

另外,我也發現=MOD(10.1,1)都不是純粹的0.1… 我諗呢個問題牽連甚廣。

2012-02-12 18:56:14 補充:
ANDY兄太客氣了,這事例亦令我認識到小數點經運算後對某些函數使用的影響。

共勉~ ^^
2012-02-11 4:29 pm
同意 kf_****** 的回答
公式亦可改為

=INT((10.1*10-10*10))

2012-02-11 18:32:08 補充:
多謝提點, 原來之前的公式有誤......
按照kf_****** 的回答...
相信Excel 把 10.1 = 10.099999999999
故此 10.1 - 1 = 0.0999999999
而 1.1 = 1.100000000001
故此 1.1 - 1 = 0.10000000000001
i.e. 0.1 = 0.099999999999 或 0.10000000000001
=INT((100.1-100)*10) --> 0
=INT((1000.1-1000)*10) --> 1


收錄日期: 2021-04-24 10:29:29
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120211000051KK00076

檢視 Wayback Machine 備份