将小数转换为双倍时遇到奇怪的问题。
以下代码返回 true:
Math.Round(0.010000000312312m, 2) == 0.01m //true
但是,当我将其转换为 double 时,它会返回 false:
(double)Math.Round(0.010000000312312m, 2) == (double)0.01m //false
当我想使用 Math.Pow 并被迫将小数转换为双精度时,我遇到了这个问题,因为小数没有 Math.Pow 重载。
这是记录在案的行为吗?当我被迫将小数转换为双倍时,如何避免它?
来自 Visual Studio 的屏幕截图:
铸造 Math.Round 以使我翻倍以下结果:
(double)Math.Round(0.010000000312312m, 2) 0.0099999997764825821 double
(double)0.01m 0.01 double
更新
好的,我将问题重现如下:
- 当我运行 WPF 应用程序并在它启动后检查手表中的输出时,我就像在空项目上一样。
- 有一部分应用程序将值从滑块发送到计算算法。我得到错误的结果,我在计算方法上设置了断点。现在,当我检查监视窗口中的值时,我得到错误(没有任何修改,我只是刷新监视窗口)。
- 一旦我在一些较小的项目中重现该问题,我将在此处发布。
更新2
不幸的是,我无法在较小的项目中重现该问题。我认为埃里克的回答解释了原因。