我正在尝试为咖啡馆制作应用程序。它有一个简单的界面,咖啡名称,标签和数量,numericupdown,收据文本框和收据按钮。我将收据按钮编码为在收据文本框中显示咖啡名称和数量,如下所示:
If (espresso.Value > 0) Then receipt.AppendText("Espresso" + vbTab + vbTab + espresso.Value.ToString + Environment.NewLine)
效果很好,但是我想在咖啡数量旁边加上价格,所以我添加了以下几行:
Dim espressoprice As Double
espressoprice = 3
Dim espressoquantity As Double = Convert.ToDouble(espresso.Value)
Dim espressototal As Double
espressototal = (espressoprice * espressoquantity)
(espresso.value是numericupdown值)
并像这样更改第一条代码行:
If (espresso.Value > 0) Then receipt.AppendText("Espresso" + vbTab + vbTab + espresso.Value.ToString + vbTab + espressototal + Environment.NewLine)
但我不断收到此错误:
“浓缩咖啡2”“从字符串”“到类型'Double'的转换无效。”
我做错了什么,请帮忙。
答案 0 :(得分:3)
此问题的正确解决方案是使用正确的运算符。您正在尝试执行字符串连接,但是您正在使用加法运算符。这个:
"Espresso" + vbTab + vbTab + espresso.Value.ToString + vbTab + espressototal + Environment.NewLine
实际上正在执行多个加法。加法映射到两个Strings
的串联,但是对于数字,加法是数学的,而不是文本的。为了添加String
和数字值,系统必须将其中一个隐式转换为另一种类型。您显然是假设该数字将转换为String
,但实际上恰恰相反,即系统正在尝试将String
转换为数字而失败。这就是为什么您不应该依赖隐式转换的原因。如果您使用串联运算符(如在执行串联时应使用的那样),则只有一种方法可以实现:
"Espresso" & vbTab & vbTab & espresso.Value.ToString & vbTab & espressototal & Environment.NewLine
请注意,在这种情况下,您不必将数字显式转换为String
,因为已为Strings
和数字值定义了连接运算符。串联是一个String
操作,因此您知道一个事实,所有可以视为String
的事物都将成为这样。
也就是说,反正还有更好的选择,例如
receipt.AppendText(String.Concat("Espresso", vbTab, vbTab, espresso.Value, vbTab, espressototal, Environment.NewLine)
答案 1 :(得分:1)
在添加了expressototal
的行中,您需要将其值转换为字符串,以便将其添加到其他字符串,即expressototal.ToString
。