.net 值对于Decimal来说太大或太小

ljo96ir5  于 2023-05-23  发布在  .NET
关注(0)|答案(3)|浏览(613)

我有下面的代码:

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

if (shortfall > 0)
{
  returnValue = Convert.ToDecimal(shortfall);
}

这将产生上述错误。

epfja78i

epfja78i1#

嗯,这是相当不言自明的。
decimal.MaxValue是79,228,162,514,264,337,593,543,950,335-你的数字比这个大。
虽然decimal的精度比double更精确,但double的范围更大--它可以处理非常非常大和非常小的数字。
现在,如果你能告诉我们你到底想做什么,我们可以帮你找到解决办法…老实说,混合使用doubledecimal不是一个好主意。

shyt4zoc

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。

iyfjxgzm

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

相关问题