总和公式行为奇怪时添加文本

我有一个macros,其中一个命令是创build公式来总结事情。 一切都很好,直到今天有人向我展示了问题。

Sum函数应该给我:36286,54。 当函数看起来像这样: =SUM(I7:I128)一切正常,但是当我想像这样添加一些文本: =SUM(I7:I128) & " CZK"它给我:36286,5399999999 CZK

我加倍检查值,没有什么似乎是错的…问题不是通过macros创build公式造成的,同样的问题出现在手动。 我调查了那些使用“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 

这很可能是因为在所有这些价值的积累过程中引入了逐渐的错误。 我怀疑,如果你使用:

 =SUM(I7:I128) - 36286,54 

你会得到一个非常小,但非零的数字。 如果你检查下面的图表,你确实是这么做的。 为了解决这个问题,我build议在join货币指标之前明确四舍五入:

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

这是Excel 2k13中概念的certificate。 C单元格公式为:

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

结果是:

在这里输入图像说明

所以你可以从C4中看出, 实际值和显示值之间的误差约为0.00000000008 ,这个百分比很小。

至于为什么发生这种情况,根据微软的文档 ,Excel使用标准的IEEE754数据types,这是众所周知的问题,这些数字没有无限的精度。

为什么它似乎工作,当你附加一个string,我不知道。 也许Excel不会强制将types强制为string,而是在最后(也许是基于input数据特征)进行更智能的四舍五入。

无论如何,明确的四舍五入似乎是为了解决这个问题,所以作为一个实用主义者/现实主义者,我只是想去解决这个问题。

当你添加“CZK”时创build一个文本string,而不是舍入,我会selectTEXT函数。 通过这种方式,您可以确切地说明您希望显示的号码:

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

将显示

 36286.54 CZK