NumericUpDown可设置小数点



我正在尝试使NumericUpDown框设置文本框的小数点,并在每次向上或向下单击时更新。我尝试了两种不同的方式:

Me.txtCalc.Text = FormatNumber(Me.txtCalc.Text, Me.NumericUpDown1.Value)

这种方法有效,但当我增加值时,它不会保留十进制值。因此,如果文本框显示为2,则实际应为2.987899。我将NumericUpDown框从0更改为6,它所做的只是显示:2.000000。

我也尝试过这种方式(我认为我做错了…)

Me.txtCalc.Text = Math.Round(CDec(Me.txtCalc.Text), CInt(Me.NumericUpDown1.Value))

这是我唯一能让它做任何事情的方法。当我尝试这个的时候,每次我点击vlaue向上,它都毫无作用。但如果我先将其设置为7,然后添加一些值,如:2.987899;当我从7向下点击到1时,它会像应该的那样一次删除一个点。。。它就是回不去了。完全

我假设我使用Math.Round,因为这是保持十进制值的唯一方法。。。

希望我能解释一下,让你们理解。

如有任何帮助,我们将不胜感激。

Me.txtCalc.Text = FormatNumber(Me.txtCalc.Text, Me.NumericUpDown1.Value)

这不仅格式化了值,还为任何下一次迭代重置了起始值。假设起始值2.987899在小数点后几位递减,则VALUE:发生变化

2.98789
2.9878
2.987
..
2.

当"2"被分配给TB时,上升的起始值为2。剩下的小数都丢了。你需要存储在一个十进制变量中,并按照你的意愿设置THAT的格式:

Dim decVal As Decimal = 2.987899 
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
    ' now, I am not changing the underlying VALUE, just the format
    TB1.Text = FormatNumber(decVal, NumericUpDown1.Value)
End Sub

我不确定Math.Round如何获得不同的结果,因为显示的代码仍然会为小数较少的TB分配一个新的,因此会丢失。

最新更新