这对某些人来说似乎是一个愚蠢的问题,但我需要将一个双精度数转换成十进制用作货币。 M去哪儿了?
decimal dtot = (decimal)(doubleTotal);
答案 0 :(得分:53)
您只使用M
作为数字文字,只需投出它:
decimal dtot = (decimal)doubleTotal;
请注意,浮点数不适合保留精确值,因此如果您先将数字相加然后转换为Decimal
,则可能会出现舍入错误。您可能希望在将数字添加到Decimal
之前将其转换为{{1}},或者确保数字首先不是浮点数。
答案 1 :(得分:25)
你可以像这样将一个double转换为小数,而不需要M
文字后缀:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
在声明新的文字十进制值时,您应该使用M
:
decimal dec = 123.45M;
(如果没有M
,则将123.45视为double,不会编译。)
答案 2 :(得分:22)
使用默认转换类:Convert.ToDecimal(Double)
答案 3 :(得分:13)
Convert.ToDecimal(the double you are trying to convert);
答案 4 :(得分:0)
这是一个古老的问题,我确实利用了此处显示的一些答案。但是,在我的特定情况下,我想转换为double
的{{1}}值通常可能大于decimal
。因此,我没有处理异常,而是编写了此扩展方法:
decimal.MaxValue
如果您不想麻烦处理溢出异常,并且如果发生这种情况,您只想保持最大可能值(以我的情况为例),则上述方法有效,但是我知道对于许多其他情况,这不会预期的行为,可能是异常处理。