上图显示了数据库表中名为“ igstAmt”的列之一。
当我使用查询"SELECT sum(igstAmt) as igstAmt FROM salesinvoice
时,它返回带有许多小数点的值21616.7500129491
,但正确的答案是21616.75
。我知道我可以在显示时取整结果,我想知道为什么会这样吗?该列中条目的最大小数点为2,所以结果也应该有2个小数点,对吗?列的数据类型为float
。
答案 0 :(得分:2)
float
数据类型不代表带有十进制数字的数字。它用二进制表示数字,所以数字中的二进制数字表示16,8,4,2,1,½,¼,⅛等的2的幂。
显示为“ 272.7”,“ 0.55”等的数字不能精确表示存储的值。例如,显示为“ 272.7”的数字实际上可能是272.70001220703125。
用于格式化输出数字的规则可能会使用少于显示精确值所需的所有数字的数字来向您隐藏这些差异。
当您添加这些数字时,实际数字与附近的十进制表示形式之间的差异可能会增加或缩小,具体取决于差异之间的机会差异。您看到的总和是这些增加的自然结果。