数学.Round根据运行的位置产生不同的结果
本文关键字:结果 位置 运行 数学 Round | 更新日期: 2023-09-27 18:05:44
下面这行代码产生了两个不同的结果。
给定以下行
var rounded = Math.Round(415 * 0.01f, 1);
我希望它一直四舍五入到4.2。当我从控制台应用程序运行这个程序时,我总是得到预期的结果4.2。如果我在单元测试中放入相同的行并运行该测试,我最终得到4.1。如果这行运行在windows服务中,我也会使用4.1。
关于为什么它会产生不同的值或如何使其行为一致的任何想法?
使用visual studio 2013在64位机器上运行
很多年前我也有过类似的问题。一段时间后,我的应用程序计算双精度值与一个精度和一段时间后-与另一个精度。这是非常奇怪的。
经过一段时间后,我发现在某些时候应用程序初始化DirectX默认标志和DX反过来改变FPU精度与双值。
所以,作为一个建议,请检查相邻的代码是否有副作用。(检查DirectX使用情况,检查外部非托管dll使用情况)
PS:没有魔法。不要混淆。并尝试推迟十进制的使用。
似乎控制台和测试运行程序使用不同的首选方法来舍入。
这应该会给你相同的结果:
var rounded = Math.Round(415 * 0.01f, 1, MidpointRounding.AwayFromZero);
var rounded = Math.Round(415 * 0.01d, 1);
可以用double来代替float
精度不够