鉴于Decimal.MaxValue = 79228162514264337593543950335m
为什么下一行在本地窗口中给出7922816251426433759354395034M而不是7923816251426433759354395033.5m?
十进制目标= Decimal.MaxValue / 10m;
答案 0 :(得分: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节声明:
编译时的评估 常量表达式使用相同的 作为运行时评估的规则 非常数表达式,除了 运行时评估会有的地方 引发异常,编译时 评估会导致编译时错误 发生。
这显然不是这里的情况。 HMM。
编辑:我已提交a bug to Microsoft Connect。我们会看到它会发生什么。
答案 1 :(得分:0)
我猜是因为当你除以10时,你超越了最大精度值。http://en.wikipedia.org/wiki/Arithmetic_precision