【问题标题】:Conversion from 'double' to 'decimal' and 'string' to 'double' error in VB listVB列表中从'double'到'decimal'和'string'到'double'的转换错误
【发布时间】:2021-10-23 09:57:39
【问题描述】:

所以我创建了这个名为“菜单”的列表,其中存储了菜单项的名称和价格。我已经使用类“MenuItem”完成了这项工作,其中我将name 声明为string,将price 声明为decimal。但是我在列表中遇到了这个错误,它不能从“double”转换为“decimal”,也不能从“string”转换为“double”。我确实有严格的选项,但即使关闭它,我在运行代码时也会收到此错误。

我尝试过使用 cdbl() 函数,如下所示:.cost =cdbl(2.0 * txtburger.text),但它仍然不起作用。

 Dim menu As New List(Of MenuItem) From
     {
         New MenuItem With {.Name = "Burger", .Cost = 2.0 * txtburger.Text},
         New MenuItem With {.Name = "wrap", .Cost = 2.0 * txtwrap.Text},
         New MenuItem With {.Name = "Parmesan", .Cost = 2.5 * txtparmesan.Text},
         New MenuItem With {.Name = "Stirfry", .Cost = 3.0 * txtstirfry.Text},

【问题讨论】:

  • 假设 price 是指 Cost,如果此属性为十进制类型,则此:2.0 是一个 Double 值,而此:txtburger.Text 是一个字符串。这:Option Strict ON 是您应该在项目属性中设置的内容。会有很大帮助的。
  • 我确实在帖子中声明,我的 Option strict 已经开启。这并没有什么不同。
  • 如果您将 Option Strict 设置为 ON,那么您将无法运行该应用程序,因为它不允许您编译它,因为您试图设置一个 Decimal 属性值乘以一个 Double通过一个字符串。此外,您在此处发布的整个内容都会变成红色。 D 是 Decimal 文字类型字符(因此,这是 Double:2.0,这是 Decimal:2.0D)和 Decimal.TryParse() 可以将字符串的内容转换为 Decimal 值,如果它验证的话。 -- Option Strict ON 可以帮助您,因为它可以让您在犯此类错误时立即看到它,因此您可以立即修复它们。
  • 我以前问过这个。你有自己的 MenuItem 类吗? .net 框架提供的 MenuItem 类没有 Cost 属性。
  • 只需使用.Cost = 2.0 * Convert.ToDecimical(txtWhatever.Text.Replace(".",",")) @Caius Jard 在下面的回答中也提到过。

标签: vb.net list oop error-handling type-conversion


【解决方案1】:

.cost =cdbl(2.0 * txtburger.text)

2.0 是一个数字

txtburger.Text 是一个字符串

字符串和数字不能相乘。 CDbl 尚未参与; VB 在将结果传递给 CDbl 之前尝试执行您的 number * string 操作

仅将文本部分转换为 double,这样您最终会执行 number * number。看看Convert.ToDoubleConvert.ToDecimal 方法

如果您仍然为此苦苦挣扎,请扔掉所有文本框并用 nunericupdown 控件替换它们,这样您就可以使用它们的 Value 属性(它是一个数字)而不是文本框的 Text(它是一个字符串)

【讨论】:

  • 由于某种原因,当我的事件处理程序处理复选框时,我只会让这个字符串出现双重错误。当我将其更改为“按钮”然后运行程序并单击该按钮时,它不会给出此错误。我不知道为什么会这样。
  • 还有你所说的“nunericupdown control”是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 2017-11-29
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多