对于十进制,值太大或太小

Bur*_*urt 19 .net c#

我有以下代码:

double shortfall = GetSomeNumber(); //3.3588548831176006E+29

if (shortfall > 0)
{
  returnValue = Convert.ToDecimal(shortfall);
}
Run Code Online (Sandbox Code Playgroud)

这会产生上述错误.

有人可以帮我吗?

Jon*_*eet 26

嗯,这是相当不言自明的.

decimal.MaxValue 是79,228,162,514,264,337,593,543,950,335 - 你的数字比这大.

虽然decimal精度比精度更高double,double但有更大的范围 - 它可以处理非常非常大的非常非常小的数字.

现在,如果你能告诉我们你真正要做的事情,我们可以尝试帮助找到解决方案......混合double并且decimal说实话,这很不是一个好主意.

  • @Burt:是的,你在这里仍然存在根本问题 - 但我建议除此之外,保持在`decimal`的世界里是一个好主意(或者使用`double`开头).基本上做出选择并坚持下去:) (3认同)
  • @Burt:你用的是什么样的力量?对于`decimal` IME使用非整数幂是相对*罕见的.对于整数幂,你可以循环和乘法:) (2认同)

Ode*_*ded 11

这意味着返回的值不能转换为十进制,因为它太大.

十进制值可以在正数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.