Java部门返回错误的结果

时间:2015-07-10 08:35:22

标签: java

        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为什么?

5 个答案:

答案 0 :(得分:7)

24 * 60 * 60 * 100086400000。如果您将其乘以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

的方式

How to initialize long in Java?

答案 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));
 }