MSDN说:
“如果没有后缀m,则将该数字视为double,从而生成编译器错误。”
“M”中的内容是什么:
decimal current = 10.99M;
代表什么?
与...不同:
decimal current = (decimal)10.99
答案 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.5米,你每次都会得到一半的ANYNUMBER。
使用decimal
获取资金
double
兑换汇率答案 2 :(得分:2)
嗯......我认为“D”会与double
混淆,所以......他们选择了“M”?也许是为了“钱”?看起来有点傻......但我找不到任何确定的东西。