将双精度变量转换为十进制

本文关键字:十进制 转换 变量 双精度 | 更新日期: 2023-09-27 17:56:32

如何在进行货币开发时使用double decimalM去哪儿了?

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);

嗯,这是一个老问题,我确实利用了这里显示的一些答案。然而,在我的特定场景中,我想转换为decimaldouble值通常可能大于decimal.MaxValue。因此,我没有处理异常,而是编写了此扩展方法:

    public static decimal ToDecimal(this double @double) => 
        @double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;

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