5

鉴于 Decimal.MaxValue = 79228162514264337593543950335m

为什么下一行在本地窗口中给我 7922816251426433759354395034M 而不是预期的 7922816251426433759354395033.5m?

小数目标 = Decimal.MaxValue / 10m;

4

2 回答 2

6

我怀疑这是一个编译器错误,实际上。

这是一个简短但完整的程序来说明我为什么这么认为:

using System;

class Test
{
    static void Main()
    {
        decimal constant = decimal.MaxValue / 10m;
        decimal calculated = decimal.MaxValue;
        calculated /= 10m;

        Console.WriteLine (constant);
        Console.WriteLine (calculated);        
    }
}

输出:

7922816251426433759354395034
7922816251426433759354395033.5

我将深入研究规范以查看提供了哪些保证。

编辑:在规范中,第 7.18 节声称:

常量表达式的编译时求值使用与非常量表达式的运行时求值相同的规则,除了在运行时求值会引发异常的情况下,编译时求值会导致发生编译时错误。

这显然不是这里的情况。唔。

编辑:我已经向Microsoft Connect 提交了一个错误。我们会看看它会发生什么。

于 2008-12-04T20:04:56.577 回答
0

我猜是因为您在除以 10 时超出了最大精度值。 http://en.wikipedia.org/wiki/Arithmetic_precision

于 2008-12-04T20:06:21.223 回答