Dim correctResults As Integer
Private Sub CheckResult()
Dim num1 As Decimal = CDec(textBox1.text)
Dim num2 As Decimal = CDec(TextBox3.Text)
Dim operator as String = TextBox2.Text
Dim result As Decimal = CDec(TextBox4.text)
Select Case operator
Case "+"
If result = num1 + num2 Then
correctResults += 1
End If
Case "-"
If result = num1 - num2 Then
correctResults += 1
End If
Case "*"
If result = num1 * num2 Then
correctResults += 1
End If
Case "/"
If result = num1 / num2 Then
correctResults += 1
End If
Case Else
Exit Sub
End Select
End Sub
它应该返回1000,但返回5为什么?
答案 0 :(得分:7)
24 * 60 * 60 * 1000
是86400000
。如果您将其乘以1000
,它将溢出int
类型(因为int
可以容纳的最大值为2147483647
,这比{{1}少很多{}}}你将获得86400000000
的{{1}}。
然后,当您将结果除以500654080
时,您将获得a
。
为了解决这个问题,你需要明确指定乘法的结果是86400000
- 这是因为Java中的所有数字运算符都产生整数,除非明确指示生成其他数字类型。
只需在某些操作数上添加5
即可:
long
答案 1 :(得分:1)
java中的普通数字被视为int
。您需要附加L才能转换为long
。没有L
a =500654080
,这是错误的。
final long a= 24 * 60 * 60 * 1000 * 1000L;// Append L
答案 2 :(得分:1)
24 * 60 * 60 * 1000 * 1000
这会导致数字溢出,因为它会被视为int
值。所以你会得到奇怪的结果。你应该在这里使用long
。
您应该使用24 * 60 * 60 * 1000 * 1000L
(这是您定义long
)
答案 3 :(得分:1)
同意上述答案您可以通过以下两种方式实现您的目标:
public static void main(String[] args) {
//way 1
final long a =(long) 24 * 60 * 60 * 1000 * 1000;
final long b = (long)24 * 60 * 60 * 1000;
System.out.println(a / b);
//way 2
final long a1 = 24 * 60 * 60 * 1000 * 1000L;
final long b1 = 24 * 60 * 60 * 1000L;
System.out.println(a1 / b1);
}
答案 4 :(得分:0)
您可以使用BigInteger或Long:
public static void main(String[] args) {
final BigInteger a = new BigInteger("24");
//multiply by creating big integers....
final BigInteger b = new BigInteger("60")
System.out.println(a.divide(b));
}