想象一下下面的情况。金额在循环中添加到总数中:
float total = 0;
float[] amounts = new float[]{...};
foreach(float amount in amounts)
{
total += amount;
}
total
, 以及所有amount
s 都写入数据库。当我SUM(amount)
在 SQL 中计算时,它会产生一个不同于total
. 此外,当我在 C# 中进行相同的计算时,但这次将金额添加到 double 类型的值中,
double total = 0;
//the rest of the code is the same as above
然后total
代表正确的值。
这可能是由浮点数和双精度数之间的精度差异引起的吗?
请注意,这取决于值。这个计算的大部分结果都是正确的。