2016-05-17 106 views
0

我想解析一個非常小的數字(範圍從0到20)。所以,我知道這不是尺寸問題。但是我的代碼始終返回false。int.TryParse返回false爲整數值

parseResult = int.TryParse(tempResult.ToString().Trim(), out Result);

這裏tempResult是一個對象類型值可以是整數或字符串。我收到的值是一個整數(準確地說是2)。然而,parseResult始終是錯誤的。

我在這裏錯過了什麼?

編輯: 顯然,數據庫中的值保存爲十進制,因此實際值爲2M,而不是2.0000。現在,如何解決這個問題。我不需要尾隨零,只需要十進制前的值。

編輯: 該值可以是字符串或小數。我只想使用小數部分。我總是可以直接轉換爲十進制,但如果值是一個字符串,那將不起作用。

編輯:

全功能:

  object tempResult = bqObject.GetSingleValue(strQuery); 
     //get value from the system param table 
     if (tempResult == null) 
     { 
      tempResult = bqObject.GetSingleValue(strSysParamQuery); 
     } 
     //validate database values 
     if (tempResult == null) 
     { 
      throw new BaseException("DB100001"); 
     } 
     else 
     { 
      parseResult = int.TryParse(tempResult.ToString().Trim(), out Result); 

      if (!parseResult) 
      { 
       throw new BaseException("DB100002"); 
      } 
     } 

首先查詢讀取一個nvarchar列,而第二個讀取小數列。所以,我試圖解析這兩個字符串,然後解析爲int。問題是數值到達十進制時,tempResult.ToString().Trim()行將其轉換爲2M而不是2.0000。這就是爲什麼該功能失敗。

+0

do var test = tempResult.ToString()。Trim();然後調試並查看值,它看起來是否正確? – Botonomous

+0

tempResult.ToString()的值是什麼。修剪()完全?結果是什麼類型? – RvdK

+3

你可以給我們一個「tempResult」的值的例子,它支持返回true嗎? – Nasreddine

回答

1

如果你是傳遞一個十進制值,然後一個整數解析將返回false。你有幾個選擇。如果你知道它總是一個十進制格式,改爲使用decimal.TryParse而不是int.TryParse,或者如果你不知道它是一個整數還是十進制數,並且希望所有結果都是一個整數,就像你一樣已經調用toString,在傳遞一個字符串格式化 「NO」。

​​

N0說給我沒有小數位。你也可以使用這個N1,N2等...

這將總是削減小數(有效地做一個Math.Floor(),這可能不是你想要的,在這種情況下,你應該使用數學();方法來獲得所需的精度

+0

謝謝。這工作。使用'N0'將小數轉換爲正確的字符串。 – jitendragarg

0

除了解析,您可能還想嘗試Convert.ToInt32。這需要處理大部分轉化 - 只要您獲得基本類型即可。

你只需如果你要null值要小心 - 在這種情況下,Convert.ToInt32回報0int.TryParse會拋出異常。如果這是你必須要處理的,你必須在轉換該值之前添加一個額外的空檢查。

0

對於轉換類似2.0000或2M,你需要隱蔽爲十進制像decimal.TryParse(value),所以你可以轉換十進制與Decimal.ToInt32(value)

更多信息,詮釋你可以看到這個MSDN