C#将一个double变量转换为十进制

时间:2011-05-15 07:45:20

标签: c# casting decimal currency

这对某些人来说似乎是一个愚蠢的问题,但我需要将一个双精度数转换成十进制用作货币。 M去哪儿了?

decimal dtot = (decimal)(doubleTotal);

5 个答案:

答案 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

如果您不想麻烦处理溢出异常,并且如果发生这种情况,您只想保持最大可能值(以我的情况为例),则上述方法有效,但是我知道对于许多其他情况,这不会预期的行为,可能是异常处理。