我正在尝试一个计算草坪大小的程序 - 它将有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 :(得分: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所以你可以找到你的。
另一方面,您应该使用NumericUpDown控件而不是TextBox
。
它公开了显示的"文本"的十进制Value
属性。
答案 1 :(得分:0)
不要对变量使用Decimal
类型,而是使用Double
。问题可能在于它尝试将文本框字符串值转换为Decimal时。相反,你做这样的事情:
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());