我有下面的代码:
double shortfall = GetSomeNumber(); //3.3588548831176006E+29 if (shortfall > 0) { returnValue = Convert.ToDecimal(shortfall); }
这将产生上述错误。
epfja78i1#
嗯,这是相当不言自明的。decimal.MaxValue是79,228,162,514,264,337,593,543,950,335-你的数字比这个大。虽然decimal的精度比double更精确,但double的范围更大--它可以处理非常非常大和非常小的数字。现在,如果你能告诉我们你到底想做什么,我们可以帮你找到解决办法…老实说,混合使用double和decimal不是一个好主意。
decimal.MaxValue
decimal
double
shyt4zoc2#
这意味着返回的值无法转换为十进制,因为它太大了。Decimal值可以在正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335之间-请参见MSDN。Double可以处理更大的数字--1.79769313486232e308至1.79769313486232e308。这些都不能转换为Decimal。
iyfjxgzm3#
如果你非常需要一个十进制变量。那你得再加一个条件
if (shortfall > 0) { if (shortfall.ToString().Contains("E")) return Convert.ToDecimal($"{shortfall:E8}".Substring(0, 10)); else if (shortfall.ToString() != "NaN") return Convert.ToDecimal(AnnualVal); else return 0; }
3条答案
按热度按时间epfja78i1#
嗯,这是相当不言自明的。
decimal.MaxValue
是79,228,162,514,264,337,593,543,950,335-你的数字比这个大。虽然
decimal
的精度比double
更精确,但double
的范围更大--它可以处理非常非常大和非常小的数字。现在,如果你能告诉我们你到底想做什么,我们可以帮你找到解决办法…老实说,混合使用
double
和decimal
不是一个好主意。shyt4zoc2#
这意味着返回的值无法转换为十进制,因为它太大了。
Decimal值可以在正79,228,162,514,264,337,593,543,950,335到负79,228,162,514,264,337,593,543,950,335之间-请参见MSDN。
Double可以处理更大的数字--1.79769313486232e308至1.79769313486232e308。这些都不能转换为Decimal。
iyfjxgzm3#
如果你非常需要一个十进制变量。那你得再加一个条件