通过函数向文本框添加小数

时间:2018-08-16 01:23:44

标签: vb.net

我有一段代码,当某些按钮被按下时,将在整个表单中重复几次。在单击按钮时,应该将文本框内的小数点后的值添加到每个按钮之间的不同值。到目前为止,我的代码如下:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal)
    Dim num1 As Decimal
    num1 = a + b
    Return num1
End Function

Private Sub btnMinusMushroom_Click(sender As Object, e As EventArgs) Handles btnMinusMushroom.Click
    EditPrice(CDec(txtEditCost.Text) + "0.5")
  End Sub

如果尚不清楚代码应执行的操作,则函数“ EditPrice”中的“ a”变量是文本框“ txtEditCost”内的十进制值,而.5的十进制值应为添加到文本框值。

函数名称带红色下划线,表示“未为'公共函数EditPrice(ByVal a As Decimal,ByVal b As Decimal)作为对象的参数'b'指定参数”。  我不知道这意味着什么或如何解决问题,有什么想法吗?,谢谢

1 个答案:

答案 0 :(得分:5)

您的代码存在许多问题。为了帮助您将来避免此类问题,我强烈建议您设置Option Strict On。这将不允许缩小隐式转换和后期绑定的范围,这将迫使您更多地考虑使用的数据类型。您可以在项目属性中为当前项目设置On。您还可以在IDE选项中将其设置为On,以便在以后的所有项目中默认为On

第一个问题是Option Strict On会标记的问题,即您已声明一个没有返回类型的函数。这个:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal)

应该是这样:

Function EditPrice(ByVal a As Decimal, ByVal b As Decimal) As Decimal

第二个问题与该功能的命名有关。您已将其命名为EditPrice,但是,如果查看该方法的实际代码,则该名称与它完全无关。那里没有价格,也没有编辑。它所做的就是将两个Decimal类型的数字相加并返回结果。没什么要求数字代表价格,也没有编辑,因为方法没有改变。

第三个问题是如何调用方法。该方法声明为带有两个Decimal自变量,但是您在做什么?

EditPrice(CDec(txtEditCost.Text) + "0.5")

这有什么意义?您从String获得了一个TextBox,并将其转换为Decimal,然后向其中添加了另一个String,然后将单个结果传递给该方法。那是各种各样的错。首先,为什么要在String上添加Decimal?如果要将数字0.5加到某物上,请使用数字,而不要使用String。如果要添加到Deciaml,请使用十进制数。其次,当方法的重点是将两个数字相加时,为什么要在其中添加两个数字并将结果传递给方法?该代码应该更像这样:

EditPrice(CDec(txtEditCost.Text), 0.5D)

但这仍然是一个问题,因为正如我所说,EditPrice方法实际上并没有编辑任何内容。它仅添加两个输入并返回结果,但实际上并没有使用该结果。您大概想在某个地方显示该结果。如果再次位于同一TextBox中,则需要这样做:

txtEditCost.Text = EditPrice(CDec(txtEditCost.Text), 0.5D).ToString()

也请注意ToString那里的电话。 Option Strict On将需要这样做,因为该Text属性的类型为String,并且该方法返回一个Decimal

即使进行了这些更改,代码仍然有些不可靠。当您可以用一个简单的加法运算符进行内联运算时,将两个数字相加并返回结果的方法有什么意义?如果将一个方法命名为EditPrice,那么它实际上应该编辑一个价格。在这种情况下,将一个数字加到当前价格上,然后让该方法进行更改,例如

Private Sub EditPrice(valueToAdd As Decimal)
    Dim currentValue As Decimal

    'This will get the current value or zero if there is no valid value.
    Decimal.TryParse(txtEditCost.Text, currentValue)

    Dim newValue As Decimal = currentValue + valueToAdd

    txtEditCost.Text = newValue.ToString()
End Sub

请注意,这是Sub而不是Function,因为它实际上是在进行更改,而不是返回其他代码用来进行更改的值。在这种情况下,名称实际上描述了该方法的作用。方法名称应始终描述方法的实际作用。