C# 十进制的System.OverflowException

C# 十进制的System.OverflowException,c#,C#,在这里,我正在C#的项目中工作。但当我用这个代码运行函数的时候,程序就跟着这个掉了 在这里,您需要在每个步骤中将公式拆分为多个步骤,计算一个简单表达式,并将结果分配给一个单独的变量,以便在下一步中使用。这将允许您调试计算并查看简化最终公式的方法。十进制范围: -79228162514264337593543950335M至79228162514264337593543950335M 双量程: 1.7976931348623157E+308至-1.7976931348623157E+308 像这样

在这里,我正在C#的项目中工作。但当我用这个代码运行函数的时候,程序就跟着这个掉了


在这里,您需要在每个步骤中将公式拆分为多个步骤,计算一个简单表达式,并将结果分配给一个单独的变量,以便在下一步中使用。这将允许您调试计算并查看简化最终公式的方法。

十进制范围: -79228162514264337593543950335M至79228162514264337593543950335M 双量程: 1.7976931348623157E+308至-1.7976931348623157E+308

像这样:

        // vyteznost_CO2_s_vysokym_tlakem = x1     it mustn't be 0.00
        // mars_g_acceleration =            x2     it mustn't be 0.00
        // martian_surface =                x3     it mustn't be 0.00

        decimal x1 = 1.11m,            
        decimal x2 = 1.11m;            
        double x3 = 1.11d;          

        double v1 = decimal.ToDouble(x1 * 1000000 * x2) / x3;
        double v2 = v1 * 0.813008D;
        double v3 = Convert.ToDouble(v2);
        double v4 = Math.Log10(v3);
        double v5 = Convert.ToDouble(v4 * 0.434294D);
        double v6 = Math.Log10(v5);

        decimal v7 = Convert.ToDecimal(-6164.64D / v6); //Result 

`

什么是
-6164.64/((数学Log10(转换为0.434294D*数学Log10(转换为0.813008D*(十进制)转换为0.813008D*(十进制)转换为100万*火星加速度)/火星表面‘‘‘‘‘‘‘‘‘‘‘‘’)
返回值?看起来它超出了
decimal
边界。把它放在一个变量上,然后查看它的值。“值对于一个小数点来说太大或太小”-该错误消息是否不够清晰?复制实际的错误消息,并将其粘贴到文本中,而不是图片中。为了让我们理解这个问题,把所有的计算步骤都放到变量中,这样就更容易理解哪一步是有问题的。十进制只能处理10^-29到10^-29之间的数据。。。28-29位精度。除此之外(比如10^30),它无法处理
        // vyteznost_CO2_s_vysokym_tlakem = x1     it mustn't be 0.00
        // mars_g_acceleration =            x2     it mustn't be 0.00
        // martian_surface =                x3     it mustn't be 0.00

        decimal x1 = 1.11m,            
        decimal x2 = 1.11m;            
        double x3 = 1.11d;          

        double v1 = decimal.ToDouble(x1 * 1000000 * x2) / x3;
        double v2 = v1 * 0.813008D;
        double v3 = Convert.ToDouble(v2);
        double v4 = Math.Log10(v3);
        double v5 = Convert.ToDouble(v4 * 0.434294D);
        double v6 = Math.Log10(v5);

        decimal v7 = Convert.ToDecimal(-6164.64D / v6); //Result