Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是;M";在十进制赋值中代表什么?_C# - Fatal编程技术网

C# 什么是;M";在十进制赋值中代表什么?

C# 什么是;M";在十进制赋值中代表什么?,c#,C#,MSDN说: 如果没有后缀m,该数字将被视为双精度数字,从而产生编译器错误 中的“M”是什么: 代表什么 它是否与: decimal current = (decimal)10.99 描述 告诉编译器您想要一个十进制数 decimal current = (decimal)10.99 告诉编译器要将双精度10.99转换为十进制 有人说它代表钱。因为在金融应用程序中必须使用小数。 必须使用小数,因为它们比浮点数(双精度)更精确 十进制后缀为M/M,因为D/D已经被double接受。尽管有人认为

MSDN说:

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

中的“M”是什么:

代表什么

它是否与:

decimal current = (decimal)10.99
描述 告诉编译器您想要一个十进制数

decimal current = (decimal)10.99
告诉编译器要将双精度
10.99
转换为十进制

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

十进制后缀为M/M,因为D/D已经被double接受。尽管有人认为M代表金钱,但彼得·戈尔德回忆说,M只是被选为十进制中第二个最好的字母

十进制比双精度有更多的有效数字,因此它可以更精确-它还占用略多的内存。除了与数学或物理相关的算法外,double或float也可以

例如

  • 如果你做任何数字/0.5d,你将无法得到任何数字的一半

  • 如果你做任何数字/0.5m,每次你都会得到任何数字的一半

  • 使用
    decimal
    表示货币

  • 使用
    double
    表示汇率

更多信息

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

      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



      正如旁注一样,双精度将得到你,但十进制将得到你。因此,您可以表示(-296到296)/10(0到28)范围内的任何数字。

      重复的。。。它不是重复的,因为它没有像下面Scott那样解决问题的铸造部分。Skeet说了我认为回答这个问题没有意义-只有一个“帮助提示”-
      ,如果你在VS中键入该数字(如果你正在使用),你会得到信息“代表一个十进制数字”。如果你输入#D或f等,你会得到不同的解释。
      @NSGaga,正如我已经说过的,双向飞碟的答案并没有解决演员的问题。因此,这不是一个重复的问题。@KirkWoll没有说它是,总是有一些东西可以添加伟大的例子!正是我要找的
      M
      用于十进制中的
      M
      double tmp = 10.99;
      decimal current = (decimal)tmp;
      
      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;
          }
      }