【发布时间】:2011-08-25 19:35:19
【问题描述】:
如何将double 转换为decimal,这是在进行货币开发时使用的。 M 去哪儿了?
decimal dtot = (decimal)(doubleTotal);
【问题讨论】:
标签: c# casting decimal currency
如何将double 转换为decimal,这是在进行货币开发时使用的。 M 去哪儿了?
decimal dtot = (decimal)(doubleTotal);
【问题讨论】:
标签: c# casting decimal currency
你只使用 M 作为数字文字,当你转换它时:
decimal dtot = (decimal)doubleTotal;
请注意,浮点数不适合保持精确值,因此如果先将数字相加然后转换为Decimal,可能会出现舍入错误。您可能需要先将这些数字转换为 Decimal,然后再将它们相加,或者首先确保这些数字不是浮点数。
【讨论】:
使用默认转换类:Convert.ToDecimal(Double)
【讨论】:
您可以像这样将 double 转换为小数,而无需 M 文字后缀:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
在声明新的文字十进制值时,您应该使用M:
decimal dec = 123.45M;
(如果没有M,123.45 将被视为双精度,不会编译。)
【讨论】:
Convert.ToDecimal(the double you are trying to convert);
【讨论】:
double 到decimal 的类型转换,因为对于像 (1000000.0/3.0) 这样的double 值,在某些情况下,人们会想要剪裁“超额”精度,从而产生 333333.333333333D,但在其他情况下,人们会想要保留它,从而产生 333333.333333333313931D。而不是简单地说“转换为十进制”,代码应该指定应该如何执行转换。
Convert.ToDecimal(double) 与(decimal)doubleTotal 相同,除非doubleTotal 更改为其他类型,否则您可能会避免编译时错误并引入更难发现的运行时错误,因为可能会调用 不同的 ToDecimal 覆盖。 Cast 运算符更加明确...
嗯,这是一个老问题,我确实利用了这里显示的一些答案。尽管如此,在我的特定场景中,我想要转换为 decimal 的 double 值可能通常大于 decimal.MaxValue。所以,我没有处理异常,而是编写了这个扩展方法:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
如果您不想费心处理溢出异常,并且如果发生这种情况,您只想保持最大可能值(我的情况),则上述方法有效,但我知道对于许多其他情况,这不会是预期的行为,可能需要异常处理。
【讨论】: