2012-04-26 78 views
1

這個函數不斷給我提出問題,我似乎找不到合適的組合來使它工作。如果達到一定數量,我正嘗試應用折扣,但我一直收到轉換錯誤。我需要做什麼以便我定義一切,以便它可以工作?從字符串「」轉換爲「雙精度型」無效

Function coupon() As Decimal 

     Dim decdiscount As Decimal 
     Dim inta, intb, intc As Decimal 

     inta = 20.0 
     intb = 40.0 
     intc = 60.0 

     If lblSubtotal.Text > inta Then 
      decdiscount = 0.05 
     End If 


     If lblSubtotal.Text > intb Then 
      decdiscount = 0.1 
     End If 


     If lblSubtotal.Text > intc Then 
      decdiscount = 0.2 
     End If 

     Return decdiscount 
    End Function 

回答

2

你真的應該讓Option Strict爲您的項目。它可以幫助您在運行時避免轉換錯誤,讓您知道在輸入時有隱式轉換。您可以使用BluesRockAddict和Andrew Kennan建議的方法Decimal.TryParse

從上面的鏈接:

當您設置選項嚴格,那麼,該數據類型 爲所有編程元素指定的Visual Basic檢查。數據類型可以是顯式指定的 ,也可以使用本地類型推斷進行指定。 指定的數據類型爲所有的編程元素是 建議,有以下原因:

  • 它能夠爲你的變量和參數的IntelliSense支持。這使您可以查看其屬性和其他成員,如
    類型代碼。
  • 它使編譯器能夠執行類型檢查。類型檢查可以幫助您查找在運行時可能失敗的語句,因爲類型 轉換錯誤。它還識別對不支持這些方法的對象
    上的方法的調用。
  • 它加速了代碼的執行。其中一個原因是如果您沒有爲編程元素指定數據類型,則基本編譯器將其指定爲對象類型。編譯代碼可能有
    在對象和其他數據類型之間來回轉換,其中
    降低性能。

在你的情況下,它會標記你的代碼中的隱式轉換。

+0

+1這也是我的答案 – 2012-04-26 12:08:38

1

您應該使用Decimal.Parse()Decimal.TryParse(),例如:

If Decimal.Parse(lblSubtotal.Text) > inta Then 
    decdiscount = 0.05 
End If 

or 

Dim subTotal As Decimal = Decimal.Parse(lblSubtotal.Text, Globalization.NumberStyles.AllowDecimalPoint) 

If subTotal > inta Then 
    decdiscount = 0.05 
End If 
0

我希望lblSubtotal.Text的值不是一個數字。也許嘗試這樣的事情:你需要你的字符串轉換爲十進制

Dim subTotal as Decimal 
If Not Decimal.TryParse(lblSubTotal.Text, subTotal) Then 
' Throw an exception or something 
End If 

If subTotal > inta Then 
... 
0

你不能比較兩個字符串轉換爲十進制這樣

If System.Convert.ToDecimal(lblSubtotal.Text) > inta Then 
      decdiscount = 0.05 
     End If 
相關問題