2017-05-02 4 views
0

だから私は、次のプログラムがあります。私は11の力に11の整数値を印刷したいJavaの数学の型キャスト

import java.lang.Math; 

public class Test{ 
    public static void main(String[] args) { 
     int value = (int)Math.pow(11,11); 
     System.out.println(value); 
    } 
} 

を私はMath.pow(11,11)が戻ってくることを知っていますダブル2.85311670611E11正しいです。しかし、私がそれをint型にキャストすると、私は2147483647を得て、それは明らかに正しくないでしょう。

これはどうしてですか?それをどうやって修正することができますか?

ありがとうございました

+0

これは 'int'型が格納できる最大値です。あなたは何を期待しましたか?また、どういう意味ですか?どうすれば修正できますか? –

+0

Intの最大値は、計算の値が超過すると表示されます。ちょうど別のプリミティブ型を使用してください。 'long' –

+0

@Ousmane多くのDiaw私は285311670611が11の威力を11に持つと期待しています。これは私がintを使用できないことを意味しますか? – Amir

答えて

0

このケースでは、Longを使用する必要があります。

intは、符号なし整数で、符号なしの場合は最大2^32、数字の場合は32桁、つまり制限は0から2,147,483,647までです。 。

2^64のLongオブジェクトを試してみてください。正しい答えが得られます。 intタイプの上限だ

0

、あなたがオーバーフローすることはありませんこれは、java.math.BigIntegerBigIntegerを試みる代わりに、あるいは単にlongを使用することができます。