2015-01-16 37 views
1

我有一個宏,它的一個命令是創建公式來總結事情。直到今天有人向我展示問題時,一切都很好。總和公式行爲奇怪時,它添加文本

Sum函數應該給我:36286,54。當函數看起來像這樣:=SUM(I7:I128)一切正常,但是當我想添加一些文本這樣說:=SUM(I7:I128) & " CZK"它給了我:36286,5399999999捷克克朗

我雙重檢查的價值觀,似乎沒有什麼是錯的問題...不是通過宏創建公式造成的,同樣的問題出現在手動操作中。 我調查了當使用'For Next'循環添加它時,那些末尾的「99999999」出現在第50個值附近。 刪除一些值使「99999999」消失,但我不知道爲什麼excacly這些。

一切都在下面的數據完成,任何想法有什麼不對?

3 883,60 
5 679,75 
1 633,05 
7 825,67 
8 541,85 
892,50 
313,00 
887,44 
99,52 
277,69 
138,84 
138,84 
138,84 
277,69 
277,69 
138,84 
34,71 
34,71 
34,71 
74,30 
74,82 
130,43 
34,72 
34,72 
212,74 
99,52 
99,52 
149,74 
-2,74 
212,74 
212,74 
212,74 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
13,88 
34,71 
34,71 
69,42 
31,24 
31,24 
31,24 
31,24 
31,24 
31,24 
31,24 
31,24 
41,65 
41,65 
41,65 
10,41 
10,41 
20,83 
20,83 
20,83 
20,83 
20,83 
13,88 
3,47 
6,94 
15,62 
57,10 
190,90 
10,67 
34,71 
138,84 
138,84 
277,69 
55,50 
34,71 
86,78 
86,78 
166,61 
13,88 
67,83 
117,39 
117,39 
67,69 
62,48 
8,68 
135,37 
104,13 
69,42 
69,42 
14,75 
15,62 
15,62 
15,62 
31,24 
46,86 
62,48 
26,10 
+1

http://floating-point-gui.de/可能會感興趣的。 – pnuts

回答

5

這很可能是因爲在所有這些值的積累過程中引入了逐漸的錯誤。我懷疑,如果你使用:

=SUM(I7:I128) - 36286,54 

你會得到一個非常小但非零的數字。如果您查看下面的圖表,確實如此。爲了解決這個問題,我建議你明確地套結對貨幣指標四捨五入前值:

=ROUND(SUM(I7:I128),2) & " CZK" 

這裏的概念在Excel 2k13的證明。與C單元格公式之中:

  C 
1 =SUM(A1:A122) 
2 =SUM(A1:A122) & " CZK" 
3 =ROUND(SUM(A1:A122),2) & " CZK" 
4 =C1-36286.54 

結果是:

enter image description here

所以你可以從C4看到實際值與顯示值之間的誤差爲0.00000000008,一個很小的百分比。

至於出現這種情況爲什麼,根據Microsoft's documentation,Excel使用IEEE754標準的數據類型在幕後,這是一個衆所周知的問題,這些數字並沒有無限精度。

爲什麼當你在不要附加一個字符串,我不知道。也許Excel不會強制類型被強制轉換爲字符串,最後可能會對結尾進行更智能的舍入(可能基於輸入數據特徵)。

無論如何,明確的四捨五入似乎可以解決這個問題,所以,作爲一個實用主義者/現實主義者,我只會繼續這樣做。

+0

...但爲什麼會出現這些錯誤?我的號碼,輸入方法或它是什麼?對我來說,它看起來一切都按照它應該完成的,但仍然不能令人滿意。 – lowak

+0

試圖找出它,因爲這是非常重要的,不要失去任何數字 - 金融工作... – lowak

+0

@lowak,增加一百二十多個值給你一個CZK的百億分之一的錯誤。除非你要增加超過1萬億的價值,否則你可能是安全的:-)無論如何,我總是明確地圍繞財務電子表格(我建議你也這樣做),以確保安全。我不依賴於單元格顯示格式。 – paxdiablo

1

由於您在添加「CZK」時創建了一個文本字符串,而不是舍入,我會選擇TEXT函數。這樣,你怎麼想你的號碼,你可以準確狀態顯示:

=TEXT(SUM(A1:A122),"0.00 CZK") 

將顯示

36286.54 CZK 
+0

有趣,非常有趣。我喜歡 :) – lowak