“M”在十进制值赋值中代表什么

本文关键字:什么 赋值 十进制 | 更新日期: 2023-09-27 18:31:29

MSDN 说:

"如果没有后缀m,该数字将被视为双精度,从而产生编译器错误。

"M"在什么地方:

decimal current = 10.99M;

代表?

它与以下方面有什么不同吗:

decimal current = (decimal)10.99

“M”在十进制值赋值中代表什么

M 使数字在代码中成为十进制表示形式。

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

decimal current = (decimal)10.99

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

现在对于大于西格玛的数字,这应该不是问题,但如果你的意思是十进制,你应该指定十进制。


更新

哇,我错了。我去检查 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但 seccond 返回11


作为旁注,double将为您提供15个十进制数字的精度,

但十进制将为您提供96位精度,比例因子从0到28。因此,您可以表示范围内的任何数字((-296 到 296)/10(0 到 28))

说明

decimal current = 10.99M; 

告诉编译器您需要一个十进制数。

decimal current = (decimal)10.99

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

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

十进制后缀是 M/m,因为 D/d 已经取了双倍。虽然有人认为M代表钱,但彼得·戈尔德回忆说,M只是被选为十进制的下一个最佳字母。

小数点比双精度具有更多的有效数字,因此它可以更精确 - 它也占用了更多的内存。除了某些数学或物理相关的算法外,双精度或浮点数应该可以正常工作。

例如

  • 如果你做 ANYNUMBER/0.5d,你不会得到 ANYNUMBER 的一半。

  • 如果你做 ANYNUMBER/0.5m,你每次都会得到 ANYNUMBER 的一半。

  • decimal赚钱

  • 使用double汇率

更多信息

  • 十进制与双精度 - 差异?
  • 每个程序员都应该知道的关于浮点运算的知识

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