2013-12-11 53 views
0

我試圖做一個程序,將計算草坪的大小 - 它將有2個文本框和標籤length * width = total metres。我的問題是,當我把一個十進制值,它顯示了一個錯誤,但是當我把整數值的文本框中,也沒有任何錯誤,並計算它,我做的一切權利我的代碼看起來像這樣如何做一個草坪計劃,計算用戶輸入的總米計算

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 
     Dim decLegth, decWidth, decSize As Decimal 
     decLegth = Convert.ToDecimal(txtLength.Text) 
     decWidth = Convert.ToDecimal(txtWidth.Text) 
     decSize = decLegth * decWidth 
     lblDisplay.Text = decSize.ToString("N2") 

什麼我可以失蹤嗎?

+0

什麼錯誤?而不是使用Decimal.Parse或更好的Decimal.TryParse。 – qwr

回答

0

請勿使用Decimal類型作爲變量,而應使用Double。該問題可能是當它試圖將您的文本框字符串值轉換爲十進制。相反,你做這樣的事情:

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click 
    Dim decLegth, decWidth, decSize As Double 
    decLegth = Convert.ToDouble(txtLength.Text) 
    decWidth = Convert.ToDouble(txtWidth.Text) 
    decSize = decLegth * decWidth 
    lblDisplay.Text = decSize.ToString("N2") 

而且,我居然沒有一個VB編譯當前但您可能不得不轉換的文本框的值第一個字符串,嘗試兩種方式:

Convert.ToDouble(txtLength.Text.ToString()); 
2

這很可能是一種文化問題。您看到,在某些國家/地區,小數點之間用,分隔,而其他國家則使用.

這是我怎麼設置我的應用程序的挪威文化:

System.Threading.Thread.CurrentThread.CurrentCulture = New CultureInfo("nb-NO") 
System.Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo("nb-NO") 

所以,現在,如果我嘗試轉換我這樣做:

Dim d As Decimal = Convert.ToDecimal("10,0", System.Threading.Thread.CurrentThread.CurrentCulture) 

這裏有一個list of culture codes所以你可以找到你的。

另一方面,而不是TextBox你應該使用NumericUpDown控制。 它暴露了顯示「文本」的小數點Value屬性。