2016-01-02 51 views
-3

這裏我正在使用C#編寫項目。但是,當我運行此代碼程序的功能與此Exception下降。System.OverflowException(十進制)

jx += Convert.ToDecimal(-6164.64/ ((Math.Log10(Convert.ToDouble(0.434294D *Math.Log10(Convert.ToDouble(0.813008D*(decimal.ToDouble(vyteznost_CO2_s_vysokym_tlakem * 1000000 * mars_g_acceleration)/martian_surface)))))))); 
+0

什麼價值'-6164.64 /((Math.Log10(Convert.ToDouble(0.434294D * Math.Log10(Convert.ToDouble(0.813008D *(decimal.ToDouble(vyteznost_CO2_s_vysokym_tlakem * 1000000 * mars_g_acceleration)/ martia n_surface)))))))'returns?看起來它不在十進制邊界之內。把它放在一個變量上,看看它的價值。 –

+6

*「值不是十進制就太大或太小了」* - 錯誤消息是否不夠清楚? – poke

+0

複製實際的錯誤信息並將其粘貼到文本中,而不是圖片。爲了讓我們理解這個問題,將所有計算步驟都放入變量中,以便更容易理解哪一步是有問題的步驟。 – OmegaMan

回答

0

此處需要公式分成每個步驟計算一個簡單的表達式,並將結果指定給一個單獨的變量的步驟要在下一步驟中使用。這將允許您調試計算並查看簡化最終公式的方法。

0

十進制範圍: -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 

`