十进制舍入问题

izo*_*rew 5 c# types

鉴于Decimal.MaxValue = 79228162514264337593543950335m

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

十进制目标= Decimal.MaxValue/10m;

Jon*_*eet 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);        
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

7922816251426433759354395034
7922816251426433759354395033.5
Run Code Online (Sandbox Code Playgroud)

我将深入研究规范,看看给出了什么保证.

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

常量表达式的编译时评估使用与非常量表达式的运行时评估相同的规则,除了运行时评估会抛出异常的情况,编译时评估会导致编译时错误发生.

这显然不是这里的情况.嗯.

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