“M”代表十进制值赋值是什么?

时间:2012-04-18 19:04:24

标签: c#

MSDN说:

“如果没有后缀m,则将该数字视为double,从而生成编译器错误。”

“M”中的内容是什么:

decimal current = 10.99M;

代表什么?

与...不同:

decimal current = (decimal)10.99

3 个答案:

答案 0 :(得分:30)

M使数字成为代码中的十进制表示。

要回答问题的第二部分,是的,它们是不同的。

decimal current = (decimal)10.99

相同
double tmp = 10.99;
decimal current = (decimal)tmp;

现在,对于大于sigma的数字,它不应该是一个问题,但如果你的意思是十进制,你应该指定十进制。


<强>更新

哇,我错了。我去检查IL来证明我的观点,编译器对它进行了优化。


更新2

毕竟我是对的!你还需要小心。比较这两个函数的输出。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Test1());
        Console.WriteLine(Test2());
        Console.ReadLine();
    }

    static decimal Test1()
    {
        return 10.999999999999999999999M;
    }
    static decimal Test2()
    {
        return (decimal)10.999999999999999999999;
    }
}

第一个返回10.999999999999999999999但是秒返回11


正如旁注,double会给你15 decimal digits of precision,但十进制会得到你96 bits of precision with a scaling factor from 0 to 28。所以你可以表示范围内的任何数字((-2 96 到2 96 )/ 10 (0到28)

答案 1 :(得分:10)

描述

decimal current = 10.99M; 

告诉编译器你想要一个十进制数。

decimal current = (decimal)10.99

告诉编译器要将双10.99转换为小数。

有人说它代表。 M因为您必须在财务应用程序中使用小数。 您必须使用小数,因为它们比浮点数(双精度)更准确。

  

十进制后缀为M / m,因为D / d已被双倍占用。虽然有人建议M代表金钱,但Peter Golde回忆说M被选为十进制中的下一个最佳字母。

     

十进制数字比双数字更有意义,因此它可以更精确 - 它也占用更多的内存。除了certian数学或物理相关的算法,double或float应该没问题。

例如

  • 如果你做了ANYNUMBER / 0.5d,你将无法获得ANYNUMBER的一半。
  • 如果你做了ANYNUMBER / 0.5米,你每次都会得到一半的ANYNUMBER。

  • 使用decimal获取资金

  • 使用double兑换汇率

更多信息

答案 2 :(得分:2)

嗯......我认为“D”会与double混淆,所以......他们选择了“M”?也许是为了“钱”?看起来有点傻......但我找不到任何确定的东西。