我添加了两个十进制数字。每当小数部分达到0.60时,它应该向上舍入,例如20.60向上舍入到21.00。
我已经能够做到这一点,并且应用程序大部分都在工作,但只要小数点前的数字超过数百列,就说999.40,它到达千列,千位分隔符不会#39;工作。例如,如果我想添加两个数字,比如600.20和600.30,而不是我的答案是1,200.50,我得到1.00。
到目前为止,这是我的代码:
Private Sub Calculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculate.Click
'ans for txtbox5.tetx
Try
If Convert.ToInt32(Microsoft.VisualBasic.Right((Val(Label41.Text).ToString("N2")), 2)) + Convert.ToInt32(Microsoft.VisualBasic.Right((Val(Label42.Text).ToString("N2")), 2)) > 99 Then
MessageBox.Show("invalid entry")
Else
Label41.Text = Val(TxtBox2.Text)
Label42.Text = Val(TxtBox34.Text)
'sum of numbers in two txtbox
'TxtBox5.Text = Val(TxtBox2.Text) + Val(TxtBox34.Text)
Label43.Text = (Val(Label41.Text) + Val(Label42.Text)).ToString("N2")
'strip last 2 decimals :
ln = Convert.ToInt32(Microsoft.VisualBasic.Right((Val(Label43.Text).ToString("N2")), 2))
Label44.Text = ln.ToString
'form decimal from 2 decimals
Label45.Text = "0." & Label44.Text
'subtract new decimal from 1st answer
Label46.Text = (Val(Label43.Text) - Val(Label45.Text)).ToString("N2")
'checks if striped decimal is btw 100 and 59
If (Val(Label44.Text)) < 100 And (Val(Label44.Text)) > 59 Then
runup = runup + 1
newans = (Val(Label44.Text) - Val(60))
Label45.Text = (Val(Label45.Text) - Val(0.6)).ToString("N2")
Try
'check if decimal is between 100 and 59
If (Val(newans)) < 100 And (Val(newans)) > 59 Then
runup = runup + 1
newans = (Val(newans) - Val(60))
Label45.Text = (Val(Label45.Text) - Val(0.6)).ToString("N2")
Label47.Text = (Val(runup) + Val(Label46.Text)) + Val(Label45.Text).ToString("N2")
runup = 0
'check if new decimal is between 60 and 0
ElseIf (Val(newans)) < 60 And (Val(newans)) >= 0 Then
Label47.Text = ((Val(runup) + Val(Label46.Text)) + Val(Label45.Text)).ToString("N2")
runup = 0
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
'check if striped decimal is btw 60 and 0
ElseIf (Val(Label44.Text)) < 60 And (Val(Label44.Text)) >= 0 Then
Label47.Text = ((Val(runup) + Val(Label46.Text)) + Val(Label45.Text)).ToString("N2")
runup = 0
End If
End If
Catch ex As Exception
End Try
TxtBox5.Text = Label47.Text
数字较大导致问题的原因是什么?
答案 0 :(得分:1)
看起来您通过使用UI元素(例如标签)使您的代码更难理解,就好像它们是变量一样。这些标签的名称没有帮助 - 你是怎么想弄清楚什么,比如“Label44”代表什么?
您可以从文本框中获取输入数据并将其解析为合适的数据类型 - 对于这种特殊情况,我建议使用Decimal - 并且使用合适的变量名称可以更容易地查看代码正在执行的操作。
例如,我在表单上放了三个文本框,并将它们命名为“tbNum1”,“tbNum2”和“tbSum”,添加了一个名为“bnCalculate”的按钮,并使用了以下代码:
Private Sub bnCalculate_Click(sender As Object, e As EventArgs) Handles bnCalculate.Click
Dim num1 As Decimal = Decimal.Parse(tbNum1.Text)
Dim num2 As Decimal = Decimal.Parse(tbNum2.Text)
Dim sum = num1 + num2
Dim frac = sum - Math.Floor(sum)
If frac >= 0.6 Then
sum = Math.Ceiling(sum)
End If
tbSum.Text = sum.ToString("N2")
End Sub
需要修改代码才能正确处理负数。
我无法辨别您的某些代码的目的是什么,例如是第一个旨在限制输入的小数位数的检查?有更简洁的方法可以做到这一点。
N.B。不要将Try...Catch
与空Catch
部分一起使用,因为它会隐藏您的问题。