繁体   English   中英

Math.Round根据其运行位置产生不同的结果

[英]Math.Round produces different results depending on where it is run

我有以下代码行产生2个不同的结果。

鉴于以下行

var rounded = Math.Round(415 * 0.01f, 1);

我希望这一直到4.2。 当我从控制台应用程序运行它时,我总是得到预期的结果4.2。 如果我在单元测试中放入相同的行并运行该测试,我最终会得到4.1。 如果该行在Windows服务中运行,我最终也会得到4.1。

有关为什么会产生不同价值或如何使其表现一致的任何想法?

使用Visual Studio 2013在64位计算机上运行.NET 4.5。

很多年前我有类似的问题。 一段时间后,我的应用程序计算了一个精度的双值,并在一段时间后 - 另一个精度。 这非常奇怪。

过了一段时间后,我发现应用程序在某些时候使用默认标志初始化DirectX,DX依次使用双值更改FPU精度。

因此,作为建议,请检查您的相邻代码的副作用。 (检查DirectX用法,检查外部非托管DLL的使用情况)

PS:没有魔力。 不要混淆。 并尝试使用Decimal使用。 这是OLE上最慢的...

似乎控制台和测试运行器使用不同的首选方法进行舍入。

这应该会给你相同的结果:

var rounded = Math.Round(415 * 0.01f, 1, MidpointRounding.AwayFromZero);
var rounded = Math.Round(415 * 0.01d, 1);

你可以用double来代替float

准确性还不够

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM