我有以下代码行生成2个不同的结果。
给出以下一行
var rounded = Math.Round(415 * 0.01f, 1);
我希望这一直到4.2。当我从控制台应用程序运行它时,我总是得到预期的结果4.2。如果我在单元测试中放入相同的行并运行该测试,我最终会得到4.1。如果该行在Windows服务中运行,我最终也会得到4.1。
有关为何会产生不同价值或如何使其表现一致的任何想法?
使用Visual Studio 2013在装有.NET 4.5的64位计算机上运行。
答案 0 :(得分:0)
很多年前我遇到过类似的问题。一段时间后,我的应用程序计算了一个精度的双值,并在一段时间后 - 另一个精度。这非常奇怪。
经过一段时间后,我发现应用程序在某些时候使用默认标志初始化DirectX,然后DX会将FPU精度更改为双倍值。
因此,作为建议,请检查相邻代码的副作用。 (检查DirectX用法,检查外部非托管DLL的使用情况)
PS:没有魔法。不要混淆。并尝试使用Decimal使用。这是OLE的最慢的事情......答案 1 :(得分:0)
控制台和测试运行器似乎使用了不同的首选取整方法。
这应该给您相同的结果:
using Microsoft.EntityFrameworkCore;
答案 2 :(得分:-1)
var rounded = Math.Round(415 * 0.01d, 1);
你可以用double来代替float
准确性不够