为什么我的号码被错误地舍入?

izb*_*izb 7 c# floating-point rounding floating-accuracy

这感觉就像那种只在现场失败的代码,但我会尝试将其改编成代表我所看到的代码片段.

float f = myFloat * myConstInt; /* Where myFloat==13.45, and myConstInt==20 */
int i = (int)f;
int i2 = (int)(myFloat * myConstInt);
Run Code Online (Sandbox Code Playgroud)

单步执行代码后,i == 269,i2 == 268.这里有什么可以解释这个差异?

Ant*_*ram 15

浮动数学可以比通告的精度更高的精度执行.但是只要将它存储在浮点f中,就会失去额外的精度.在第二种方法中你没有失去那种精度,当然,直到你将结果转换为int.

编辑:请参阅此问题为什么在由parantheses分隔和由语句分隔时C#中的浮点精度会有所不同?为了比我可能提供的更好的解释.