C#中的舍入错误:不同PC上的结果不同

Dav*_*ock 0 c# rounding

我在C#中有一个函数返回以下内容:

...
float amount = smallestPercentage * (float)quantity;
return (int)amount;
Run Code Online (Sandbox Code Playgroud)

现在我知道我假设使用Convert.Int32(金额)而不是类型转换为int,这解决了问题.但我的问题真的是......

在家中开发我的程序(Windows Vista)时,我会得到1的返回值,但是当将程序部署到另一个环境(Windows XP)时,我会得到一个返回值0.

我想知道这是否与Windows版本,.NET版本甚至CPU处​​理器有关?

谢谢.

大卫

Eri*_*ert 8

事实上,你可以得到不同的结果:

  • 在不同的机器上

  • 取决于您是使用调试还是零售构建设置进行编译

  • 取决于您是否在编译时常量或运行时值中进行了数学计算

  • 如何在方法中使用局部变量和其他临时值

  • 等等.

C#规范调用浮点运算可以以比您预期更高的精度完成.从未以低于您期望的精度完成它,但我们保留在某些硬件上使用更高精度算法的权利,并且只要抖动认为它可以侥幸逃脱,就可以使用某些优化.这意味着在对精度的微小变化高度敏感的操作(如舍入)中,可能会给出非常不同的结果,似乎没有解释.

您不是第一个发现此事实的Stack Overflow用户:从int转换为float的问题