繁体   English   中英

将双变量转换为十进制

[英]Cast a Double Variable to Decimal

在进行货币开发时如何将doubledecimal M去哪儿了?

decimal dtot = (decimal)(doubleTotal);

您只将M用于数字文字,当您转换它时,它只是:

decimal dtot = (decimal)doubleTotal;

请注意,浮点数不适合保持精确值,因此如果您先将数字相加,然后转换为Decimal ,则可能会出现舍入错误。 您可能希望在将这些数字加在一起之前将它们转换为Decimal ,或者首先确保这些数字不是浮点数。

您可以像这样将 double 转换为小数,而无需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;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM