将双精度变量转换为十进制
本文关键字:十进制 转换 变量 双精度 | 更新日期: 2023-09-27 17:56:32
如何在进行货币开发时使用double
decimal
。M
去哪儿了?
decimal dtot = (decimal)(doubleTotal);
您只将M
用于数字文本,当您投射时,它只是:
decimal dtot = (decimal)doubleTotal;
请注意,浮点数不适合保留精确值,因此如果先将数字相加,然后转换为Decimal
则可能会得到舍入错误。您可能希望在将数字相加之前将数字转换为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);
嗯,这是一个老问题,我确实利用了这里显示的一些答案。然而,在我的特定场景中,我想转换为decimal
的double
值通常可能大于decimal.MaxValue
。因此,我没有处理异常,而是编写了此扩展方法:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
如果您不想费心处理溢出异常,并且如果发生这种情况,您只想保留最大可能的值(我的情况),则上述方法有效,但我知道对于许多其他情况,这不是预期的行为,并且可能需要异常处理。