如何将 double
强制转换为用于货币开发的 decimal
。 M
放在哪里?
decimal dtot = (decimal)(doubleTotal);
当您进行类型转换时,只需要使用M
来表示数字文字即可:
decimal dtot = (decimal)doubleTotal;
请注意,浮点数不适合保留精确值,因此如果您先将数字相加然后转换为Decimal
,可能会出现舍入误差。您可能想在将它们相加之前将数字转换为Decimal
,或者确保这些数字首先不是浮点数。
您可以这样将double转换为decimal,而不需要使用M
文字后缀:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
声明新的十进制文本值时,应该使用 M
:
decimal dec = 123.45M;
(没有 M
,123.45 被视为双精度数并无法编译。)
使用默认转换类:Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
double
到decimal
进行类型转换。因为对于像(1000000.0/3.0)这样的double
值,在某些情况下,我们希望截取“多余”的精度,得到333333.333333333D,但在其他情况下,我们希望保留它,得到333333.333333333313931D。代码应该指定如何执行转换,而不仅仅是说“转换为decimal”。 - supercatConvert.ToDecimal(double)
与(decimal)doubleTotal
相同,除非doubleTotal
更改为不同的类型,否则您可能会避免编译时错误并引入更难以找到的运行时错误,因为会调用不同的 ToDecimal重载。强制转换运算符更加明确... - Peter Ritchie这是一个旧问题,我确实利用了这里显示的一些答案。然而,在我的特定场景中,我想要转换为 decimal
的 double
值通常比 decimal.MaxValue
大。因此,我编写了这个扩展方法,而不是处理异常:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
double _double = (double)decimal.MaxValue;
我建议在比较时使用 >= public static decimal ToDecimal(this double _double) =>
_double >= (double) decimal.MaxValue ? decimal.MaxValue : (decimal) _double;
- Martin Eyles