2013-06-28 40 views
0

我想添加一些會話值,如果任何值有十進制值,例如12.50我得到一個輸入字符串格式不正確的錯誤。添加會話變量時,輸入字符串格式不正確

Dim Res As Integer = Convert.ToInt32(Session("ConsultingFeeAmount")) + Convert.ToInt32(Session("FoodAndBeverageAmount")) 
    TotalAmount = Environment.NewLine + "Total Amount: " + Session("ConsultingFeeAmount") + Session("FoodAndBeverageAmount") 
    TotalAmount = "Total Amount " + Res.ToString 
+1

什麼類型的總金額? –

+0

Dim TotalAmount As String – user1342164

回答

0

從十進制類

Dim consultAmt As Decimal 
Dim foodAmt As Decimal 
Decimal.TryParse(Session("ConsultingFeeAmount"), consultAmt)) 
Decimal.TryParse(Session("FoodAndBeverageAmount"), foodAmt)) 

Dim Res As Decimal = consultAmt + foodAmt 
TotalAmount = Environment.NewLine & "Total Amount: " & _ 
       consultAmt.ToString() & " " & foodAmt.ToString() 
TotalAmount = "Total Amount " & Res.ToString 

的Decimal.TryParse使用TryParse方法analize輸入字符串,並用轉換後的值設定的第二參數,如果有可能將字符串轉換爲十進制。如果不是,該方法不會增加任何異常,而第二個參數更不用說它的默認值。

編輯 的OP表示,變更後最初現在提出它有一個錯誤,指出消息:

從字符串轉換「合計金額:12.50 13.00」鍵入「雙師型」 不有效

問題是當Option Strict爲OFF時,用於連接字符串的+運算符。在這種情況下,VB編譯器會混淆操作符的含義並嘗試對兩個數值進行求和。我真的建議使用Option Strict On和Option Explicit On,因爲這會強制你的代碼更精確(不需要隱式轉換類型)。當然,如果你讓這種變化,你需要你的應用程序 的廣泛複試您可以this question/answer link

+0

當我嘗試從字符串「 總金額:12.50 13.00」轉換爲輸入'雙'無效。 – user1342164

+0

Double?我使用小數不是雙打。你能解釋一下嗎? – Steve

+0

我正在使用你的代碼,這是我得到的錯誤 – user1342164

0

我認爲你的問題在於代碼Convert.ToInt32。你不能在那裏傳遞一個十進制數。它期待一個整數。在您的代碼中發生多次。

+0

我還可以嘗試其他選項嗎? – user1342164

+0

Convert.ToDecimal怎麼樣? – DOK

+0

從字符串「 總金額:12.5013.00」轉換爲鍵入'Double'無效。 – user1342164

0

我猜你傳遞給Convert.ToInt32的值不是有效的數值。確保在使用前檢查會話值是否爲空。

if Session("ConsultingFeeAmount") IsNot Nothing Then 
    ' Now use this session variable 
End If 
+0

我該怎麼做? – user1342164

0

瞭解這個問題,我不知道vb.net比C#不同,但會議沒有返回一個對象類型化值。您需要將Session(「ConsultingFeeAmount」)轉換爲小數。

CType(Session("ConsultingFeeAmount"), Decimal) 

CType(Session("ConsultingFeeAmount"), Integer) 
+0

謝謝。我試過了,我從字符串「 Total Amount:」轉換爲輸入「Double」無效。 – user1342164