向其添加文本时,求和公式表现得很奇怪
Sum Formula acts weird when added text to it
我有一个宏,其中一个命令是创建公式来总结事物。一切都很好,直到今天有人向我展示问题。
求和函数应该给我:36286,54。当函数看起来像这样时:=SUM(I7:I128)
一切正常但是当我想像这样向它添加一些文本时:=SUM(I7:I128) & " CZK"
它给了我:36286,5399999999 CZK
我仔细检查了值,似乎没有错...问题不是由通过宏创建公式引起的,同样的问题出现在手动操作中。
我调查了当使用 'For Next' 循环添加它时,末尾的那些“99999999”出现在第 50 个值左右。
删除一些值会使“99999999”消失,但我不知道为什么会这样。
一切都在下面的数据上完成,任何想法有什么问题?
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
你会得到一个很小但 non-zero 的数字。如果您查看下图,确实如此。为了解决这个问题,我建议在使用货币指标之前明确地将值四舍五入:
=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
结果是:
所以从C4可以看出,实际值与显示值的误差约为0.00000000008
,很小的百分比。
至于 为什么 会发生这种情况,根据 Microsoft's documentation,Excel 在幕后使用标准 IEEE754 数据类型,这是一个众所周知的问题数字不是有无限的精度。
为什么当您 不 追加字符串时似乎有效,我不知道。当您不强制将类型强制转换为字符串时,也许 Excel 在末尾对总和进行更智能的舍入(可能基于输入数据特征)。
无论如何,显式舍入似乎可以解决这个问题,因此,作为 pragmatist/realist,我会接受它。
当您在附加 "CZK" 时创建文本字符串时,我会选择 TEXT
函数而不是四舍五入。这样您就可以准确说明您希望如何显示您的电话号码:
=TEXT(SUM(A1:A122),"0.00 CZK")
会显示
36286.54 CZK
我有一个宏,其中一个命令是创建公式来总结事物。一切都很好,直到今天有人向我展示问题。
求和函数应该给我:36286,54。当函数看起来像这样时:=SUM(I7:I128)
一切正常但是当我想像这样向它添加一些文本时:=SUM(I7:I128) & " CZK"
它给了我:36286,5399999999 CZK
我仔细检查了值,似乎没有错...问题不是由通过宏创建公式引起的,同样的问题出现在手动操作中。 我调查了当使用 'For Next' 循环添加它时,末尾的那些“99999999”出现在第 50 个值左右。 删除一些值会使“99999999”消失,但我不知道为什么会这样。
一切都在下面的数据上完成,任何想法有什么问题?
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
你会得到一个很小但 non-zero 的数字。如果您查看下图,确实如此。为了解决这个问题,我建议在使用货币指标之前明确地将值四舍五入:
=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
结果是:
所以从C4可以看出,实际值与显示值的误差约为0.00000000008
,很小的百分比。
至于 为什么 会发生这种情况,根据 Microsoft's documentation,Excel 在幕后使用标准 IEEE754 数据类型,这是一个众所周知的问题数字不是有无限的精度。
为什么当您 不 追加字符串时似乎有效,我不知道。当您不强制将类型强制转换为字符串时,也许 Excel 在末尾对总和进行更智能的舍入(可能基于输入数据特征)。
无论如何,显式舍入似乎可以解决这个问题,因此,作为 pragmatist/realist,我会接受它。
当您在附加 "CZK" 时创建文本字符串时,我会选择 TEXT
函数而不是四舍五入。这样您就可以准确说明您希望如何显示您的电话号码:
=TEXT(SUM(A1:A122),"0.00 CZK")
会显示
36286.54 CZK