我在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处理器有关?
谢谢.
大卫
事实上,你可以得到不同的结果:
在不同的机器上
取决于您是使用调试还是零售构建设置进行编译
取决于您是否在编译时常量或运行时值中进行了数学计算
如何在方法中使用局部变量和其他临时值
等等.
C#规范调用浮点运算可以以比您预期更高的精度完成.从未以低于您期望的精度完成它,但我们保留在某些硬件上使用更高精度算法的权利,并且只要抖动认为它可以侥幸逃脱,就可以使用某些优化.这意味着在对精度的微小变化高度敏感的操作(如舍入)中,可能会给出非常不同的结果,似乎没有解释.
您不是第一个发现此事实的Stack Overflow用户:从int转换为float的问题