2012-08-16

1.45519152283669E-11

認吧!作為一個懶人,標題上的那串數字,你連看都不打算看。LOL!

玩笑到此為止,以下進入正題。

話說最近本人因為工作需要,開始研究起Excel的“樞紐分析”功能(国內称为“数据透视表”)--這算是Excel的最後一塊拼圖了,其他諸如函數、回歸分析、表單、排序篩選、VBA之類的功能,之前多少有接觸過。進展一相當順利,直到我遇上了標題上的那串數字......不過,這串數字倒是跟“樞紐分析”沒有任何關係。

首先要介紹一下,這是一堆怎麼樣的數據。首先如圖一(點擊放大):
圖一

其中,
A欄(NO)是流水編號,各位不必理會;
B欄(PRICE)是某種商品的總價;
C欄(RATE)可視為該商品的稅率;
D欄(FEE) = B欄 * C欄 %,相當於該商品的稅款;
E~G欄(PAYMENT):例如,財政局允許我們“免息分期付款”(邊有咁好ge事!),分三次清繳該稅款。E~G欄即為每次繳交的金額;
H欄(BALANCE) = D欄(FEE) - E~G欄(PAYMENT),顯示尚欠多少稅款未交。

在圖一中,商品價格是8,885,000.00,稅率為4%,稅款(D2格)是按照公式 =B2*C2% 輸出的,結果為355,400.00,而這次只分兩次交錢,第一次交1/4(即 E2=B2*1%),第二次交3/4(即 F2=B2*3%),於是H2(BALANCE)=D2-E2-F2-G2,其數值為0.00000...,無疑是非常正確的。

 絕大部分的案例都是如此,結果是完全正確的。


可是有幾個的情況則相當怪異,圖二便是一例:
圖二

這次的商品價格是6,376,960.00,稅率稍低一些,為3%,這樣稅款D3=B3*C3%;第一次交1/3,即E3=B3*1%;第二次交2/3,即F3=B3*2%;最後H3(BALANCE)=D3-E3-F3-G3。所用的公式與上例是完全對應的。

可是結果卻出乎意料!BALANCE顯示的居然不是0.0000000000,而是一個很小、但不為零的值。仔細對一對,這個值就是標題的那串數字的負數:-1.45519152283669E-11!(為方便討論,該串數字以下簡稱為a)

我後來又做了一系列的試驗,結果如圖三所示。表中顯示的是各項的計算公式;“=某數值”表示該項直接輸入數字,而不是通過公式算出;空白表示甚麼都沒有輸入。表的最後提供了算出的BALANCE數值供參考。


討論如下:
  •  例2-1就是上面圖二的情況了,此處不贅述了;
  •  不過,例2-1裡面的百分號運算卻很不順眼,於是我把它們全部去掉,而手動輸入FEE、PAYMENT1、PAYMENT2的金額,結果卻仍是詭異的-a(見例2-2)。此例說明跟百分號運算完全無關
  •  接下來,我在計算BALANCE的時候,把沒有東西的G3格(PAYMENT3)忽略掉。矣!結果就正常了。那麼,問題是在G3格上嗎?
  •  例2-4,我把BALANCE裡面的減G3變成加G3,這無疑是亂來的。不過,我期望其結果變成“+a”,而不是“-a”,這樣就說明G3格的問題何在。只是我的期望再次落空了;
  •  做例2-4時,我抱着這樣一個信念:沒有東西的G3格,其數值會不會不是零,而是一個很小很小的數(即a)呢?例2-4已經否定了這個信念。因此,例2-5及2-6無疑只是垂死的掙扎。此兩例中,我手動輸入了G3格的內容,希望看到結果為“0”,結果又全軍覆沒;
  •  例2-7是很神奇的,我把BALANCE的公式由原來的“=D3-E3-F3-G3”變成“=D3-SUM(E3:G3)”,結果便正常了!我最終採納了這個公式,把問題解決掉。不過那串神秘的數字,我還想再研究研究;
  •  接下來我開始亂來了,例2-8和例2-9裡,我分成三次付款,BALANCE的公式仍是有問題的“=D3-E3-F3-G3”,結果都是“0”,都正常!
  • (待續)

沒有留言:

張貼留言