VB windows 表单计算多行文本框中的数字

VB windows form calculate the digit in a multiline textbox

我想计算每一行:就像第一行123*1.616和第二行213*1.616,并显示每个总数。 千克文本框中输入的每个数字将乘以 1.616,然后在 kati 标签中显示结果。 这是我的代码:

Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Enter

For Each digit In (TextBox1.Text)
            total1 = Val(digit) * 1.616
            Label9.Text = total1
        Next

        Label9.Text = total1
End sub

请帮我找到一些解决方案或解释来实现输出。

您可以使用 vbCrLf 拆分字符串

Sub main()


  Dim multilinetext As String =
    "10
     20
     30
     40
     50
     60"

    Dim number_array = multilinetext.Split(vbCrLf)
    Dim output As Integer = 0
    For Each i In number_array
        output += i
    Next
    Stop
End Sub

这应该有效

Private FACTOR As Decimal = 1.616
Private SEPARATOR As String = Environment.NewLine

Private Sub b1_Click(sender As Object, e As EventArgs) Handles b1.Click
    Label9.Text = TextBox1.Text.
        Split({SEPARATOR}, StringSplitOptions.RemoveEmptyEntries).
        Select(Function(s1) $"{Decimal.Parse(s1) * FACTOR:0.00#}").
        Aggregate(Function(s1, s2) $"{s1}{SEPARATOR}{s2}")
End Sub

下面是 LINQ 中的函数

  • Split 使用 SEPARATOR 作为分隔符将 TextBox 中的每一行组成一个数组
  • Select 将元素转换为它们的值乘以 FACTOR
  • Aggregate 将元素重新组合成分隔符分隔的字符串

为什么您的原始代码不起作用?

  • 您正在遍历文本中的每个字符,并将字符乘以浮点数(Option Strict On,如评论中所建议的那样可以防止这种情况发生)。
  • 然后在每次迭代中,您执行(简化)Label9.Text = Val(digit) * 1.616,每次都会覆盖标签。
  • 如果你在调试中单步执行(也在评论中建议),你会看到标签变成 1x1.616=1.616, 2x1.616=3.232, 3x1.616= 4.848,等等。结果是文本框中的最后一个 字符 ,'3',乘以 1.161 = 4.848。显然,这不是您想要的。您需要迭代每个完整的数字。多行文本框用新行分隔每一行。所以我们迭代每个