2014-06-17 32 views
1

我正在處理一個十進制數值的問題,一切都很好,但在某個點它給了我錯誤輸入字符串調試後我的代碼沒有格式化我發現4.90702817E-05這使我此調用代碼錯誤。它轉換所有的代碼,但當它發現上面的字符串時拋出異常。使用Math.Round時出錯

MarketValue = Convert.ToDecimal(row["MarketValue"].ToString()) , 
+2

'拋出exception' - 它拋出什麼異常? – Anuraj

+0

[從指數表示法解析數字]可能的重複(http://stackoverflow.com/questions/3879463/parse-a-number-from-exponential-notation) – Sean

+0

該行中包含的實際類型是什麼?市場價值「]'?換句話說:你真的需要一個'.ToString',後面跟着'Convert'或'Parse',或者一個簡單的投射工作('(decimal)row [「..」]')? –

回答

1

轉換通過使用下面的代碼爲十進制。以十進制形式獲取值後將其舍入。

decimal d = Decimal.Parse("4.90702817E-05", System.Globalization.NumberStyles.Float); 
+0

,因爲您將數字作爲科學記數法獲得,因此無法直接彙總。因此,將該數字轉換爲原始的十進制數字,然後您可以根據需要進行操作。 – HomeWork

+0

標記你的答案是一樣的,我做了MarketValue = decimal.Parse(row [「MarketValue」]。ToString(),NumberStyles.Float)。 – Dev

+0

不存在與以前的答案相比有點變化。只是檢查清楚。我測試它工作正常。 – HomeWork

2
MarketValue = Decimal.Parse(row["MarketValue"].ToString(), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 
+0

@rughes,如果你在評論中提到而不是發佈新的答案,它會更好! – Sajeetharan

0

的原因的例外可能是該值不是有效的decimal

以下代碼使用名爲TryParse(...)的方法。如果該值不是有效的decimal,則此方法返回false,而不是拋出異常。

例如:

decimal d = 0; 
if (Decimal.TryParse(row["MarketValue"].ToString(), out d)) 
{ 
    MarketValue = d; 
} 
+0

我試過這個工作 – Dev

+0

我試過這個工作MarketValue = decimal.Parse(row [「MarketValue」]。ToString(),NumberStyles.Float), – Dev

+1

很好。請不要忘記標記正確的答案! – rhughes

0

我建議你使用的TryParse使用下面的NumberStyles

decimal d = 0; 
    if (Decimal.TryParse(row["MarketValue"].ToString(), NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out d)) 
    { 
     MarketValue = d; 
    }