鉴于Decimal.MaxValue = 79228162514264337593543950335m
为什么下一行在本地窗口中给出7922816251426433759354395034M而不是7922816251426433759354395033.5m?
十进制目标= Decimal.MaxValue/10m;
我怀疑这实际上是编译器错误.
这是一个简短但完整的程序,用于说明我认为的原因:
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提交了一个错误.我们会看到它会发生什么.