-2

私は単純な乗算で間違った結果を出している Java プログラムのメソッドを持っていますが、何が起こっているのかわかりません。拡張する必要があるのはEclipseの設定かもしれません-私にはわかりません。

このように単純です: 987,654,321 * 10. 明らかに 9,876,543,210 のはずです。代わりに、1,286,608,618 を取得しています。世界で何?この方法は、単純に文字を読み取り、トークン化された番号 (10 桁以内) をリストに追加するだけです。他のすべては正常に機能しますが、何らかの理由でこの番号が嫌いです。

public void number(char dig, boolean lc){
    int num = Character.getNumericValue(dig);
    if(number == 0){
        number = num;
    }
    else{           
        number = number*10 + num;
    }
    if(lc){
        if(String.valueOf(number).trim().length() <= intLength){
            tokenList.add(number);
            number = 0;
            return;
        }
        else{
        System.out.println("Error in number entry. Invalid or exceeded length: " + number); 
            number = 0; 
            return;
            }   
    }
}
4

1 に答える 1

8

あなたの値は整数の範囲をはるかに超えています。次のステートメント:

System.out.println(9_876_543_210L);  // This is what you are claiming should have come
System.out.println(Integer.MAX_VALUE);

プリント:

9876543210
2147483647

そのため、 を実行する987654321 * 10と、値が に収まらず、intオーバーフローして、その結果が得られます。

別?longタイプを使用します。


以下も参照してください。

于 2013-08-28T20:08:03.993 に答える