当前位置:  开发笔记 > 编程语言 > 正文

十进制舍入问题

如何解决《十进制舍入问题》经验,为你挑选了1个好方法。

鉴于Decimal.MaxValue = 79228162514264337593543950335m

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

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



1> Jon Skeet..:

我怀疑这实际上是编译器错误.

这是一个简短但完整的程序,用于说明我认为的原因:

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提交了一个错误.我们会看到它会发生什么.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有