2010-08-05 91 views
18

我有以下的代碼:值是太大或太小,一個十進制

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

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

即生成上述錯誤。

任何人都可以幫我嗎?

+0

當試圖將一個數字除以0的結果轉換成無窮大時,我得到了這個錯誤,所以它不能轉換爲十進制。 – 2013-02-12 20:34:43

回答

21

嗯,這是相當不言自明的。

decimal.MaxValue是79,228,162,514,264,337,593,543,950,335 - 您的人數大於此數。

儘管decimal的精度比double更精細,但double的範圍更大 - 它可以處理非常大,非常非常小的數字。如果你能告訴我們你真的想要做什麼,我們可以嘗試幫助找到一個解決方案......老實說,混合doubledecimal是很不明智的。

+0

感謝Jon,我正在構建一個計算引擎,並且需要訪問僅使用雙打的Math.Pow。爲了顯示目的,我將其轉換回十進制。 任何指針都會很棒。 – Burt 2010-08-05 10:28:17

+1

@Burt - 如果您只是簡單地顯示它,爲什麼不顯示字符串表示形式? – Oded 2010-08-05 10:30:58

+2

@Burt:你使用的是什麼樣的力量?對於小數輸入法使用非整數次冪相對來說很少見。對於整數冪,你可以循環和乘以:) – 2010-08-05 10:36:09

6

這意味着返回的值不能轉換爲小數,因爲它太大。

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。這些不會全部轉換爲十進制。

相關問題