MSDN 说:
“没有后缀 m,数字被视为双精度数,从而产生编译器错误。”
“M”在什么意思:
decimal current = 10.99M;
代表?
与以下有什么不同:
decimal current = (decimal)10.99
MSDN 说:
“没有后缀 m,数字被视为双精度数,从而产生编译器错误。”
“M”在什么意思:
decimal current = 10.99M;
代表?
与以下有什么不同:
decimal current = (decimal)10.99
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 将为您提供 96 位的精度,比例因子为 0 到 28。所以你可以表示范围内的任何数字 ((-2 96 to 2 96 ) / 10 (0 to 28) )
decimal current = 10.99M;
告诉编译器你想要一个十进制数。
decimal current = (decimal)10.99
告诉编译器您要将双精度10.99
转换为小数。
有人说它代表金钱。M,因为您必须在金融应用程序中使用小数。您必须使用小数,因为它们比浮点数(双精度)更准确。
小数后缀是 M/m,因为 D/d 已经被 double 取了。尽管有人建议 M 代表金钱,但 Peter Golde 回忆说,M 只是被选为十进制中的下一个最佳字母。
小数比双精度有更多的有效数字,因此它可以更精确——它也占用更多的内存。除了某些数学或物理相关的算法之外,双精度或浮点数应该没问题。
例如
如果您执行 ANYNUMBER / 0.5d,您将不会得到 ANYNUMBER 的一半。
如果你做 ANYNUMBER / 0.5m,你每次都会得到 ANYNUMBER 的一半。
decimal
为钱而用
用于double
汇率
嗯......我认为“D”会与 混淆double
,所以......他们选择了“M”?也许是为了“钱”?似乎有点傻......但我找不到任何确定的东西。