问题概述:
对于一些十进制值,在将其从十进制类型转换为双精度浮点型时,会在结果中添加一个小分数。
更糟糕的是,有可能存在两个“相等”的十进制值,但在转换为双精度浮点数时得到不同的值。
代码示例:
decimal dcm = 8224055000.0000000000m; // dcm = 8224055000
double dbl = Convert.ToDouble(dcm); // dbl = 8224055000.000001
decimal dcm2 = Convert.ToDecimal(dbl); // dcm2 = 8224055000
double dbl2 = Convert.ToDouble(dcm2); // dbl2 = 8224055000.0
decimal deltaDcm = dcm2 - dcm; // deltaDcm = 0
double deltaDbl = dbl2 - dbl; // deltaDbl = -0.00000095367431640625
看一下评论中的结果。 结果是从调试器的监视器复制的。 产生这种效果的数字比数据类型的限制要少得多,因此它不可能是溢出(我猜!)。
更有趣的是,可能存在两个相等的十进制值(在上面的代码示例中,参见"dcm"和"dcm2",其中"deltaDcm"等于零),转换时会导致不同的双精度值。(在代码中,“dbl”和“dbl2”,它们具有非零的“deltaDbl”)
我猜这应该与两种数据类型中数字的位表示差异有关,但是无法确定具体原因!我需要知道该怎么做才能使转换符合我的需要。(例如dcm2->dbl2)