收到此错误:“从字符串“”到类型“ Double”的转换无效。”视觉工作室

时间:2019-06-10 00:53:19

标签: vb.net

我正在尝试为咖啡馆制作应用程序。它有一个简单的界面,咖啡名称,标签和数量,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'的转换无效。”

我做错了什么,请帮忙。

2 个答案:

答案 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