Java大数とタイプ変換演算


パッケージjava.mathの説明
任意の精度整数アルゴリズム(BigInteger)および任意の精度小数アルゴリズム(BigDecimal)を実行するクラスを提供する.BigIntegerは任意の精度を提供するほか、Javaの基本整数タイプに似ているため、BigIntegerで実行される操作はオーバーフローを生じず、精度も失わない.BigIntegerは、標準的なアルゴリズム操作に加えて、モードアルゴリズム、GCD計算、基本テスト、素数生成、ビット処理、およびいくつかの他の操作を提供します.BigDecimalは、通貨計算や類似計算に適した任意の精度の符号付き10進数を提供します.BigDecimalでは、ユーザーが丸め動作を完全に制御し、ユーザーが8つの丸めモードをすべて選択できるようにします.
BigInteger
BigIntegerはすべてのJavaの基本整数オペレータの対応を提供し、java.lang.Mathのすべての関連メソッドを提供します.さらに、BigIntegerでは、モード算術、GCD計算、質量テスト、素数生成、ビット操作、その他の操作も提供されています.
構築方法
方法
機能
BigInteger(byte[] val)
BigIntegerを含むバイナリ符号表示形式のbyte配列をBigIntegerに変換する.
BigInteger(String val)
BigIntegerの10進文字列表現をBigIntegerに変換します.
BigInteger(String val, int radix)
基数を指定したBigIntegerの文字列表現をBigIntegerに変換します.
import java.math.*;
import java.util.Scanner;

public class bigInteger {
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        //    1
        System.out.println("     ");
        BigInteger b=sc.nextBigInteger();//       ,    ,             ,          
        System.out.println(b);

        //2.            
        System.out.println("  10     ");
        String st;
        st=sc.next();//     
        BigInteger c=new BigInteger(st);
        System.out.println(c);

        //3.              
        System.out.println("  2     ");
        st=sc.next();
        BigInteger d=new BigInteger(st,2);
        System.out.println(d);
    }
}
//////////////
output
     
123456
123456
  10     
123
123
  2     
1000
8

メンバーメソッド
方法
機能
add(BigInteger val)
値が(this+val)のBigIntegerを返します.
subtract(BigInteger val)
値が(this-val)のBigIntegerを返します.
multiply(BigInteger val)
値が(this*val)のBigIntegerを返します.
divide(BigInteger val)
値が(this/val)のBigIntegerを返します.
mod(BigInteger m)
値が(this mod m)のBigIntegerを返します.
negate()
値が(-this)のBigIntegerを返します.
abs( )
このBigIntegerの絶対値であるBigIntegerを返します.
gcd(BigInteger val)
abs(this)とabs(val)の最大公約数であるBigIntegerを返します.
pow(int exponent)
値が(thisexponent)のBigIntegerを返します.
modPow(BigInteger exponent, BigInteger m)
値が(this mod m)のBigIntegerを返します.
and(BigInteger val)
値が(this&val)のBigIntegerを返します.
or、not、xor、shiftLeft、shiftRightなどの方法もあります
compareTo(BigInteger val)
これをvalと比較します.thisvalは1を返します.
doubleValue()
このBigIntegerをdoubleに変換
そしてintValue、longValue、floatValue
toString()
このBigIntegerの10進数文字列表現を返します.
toString(int radix)
このBigIntegerの所定の基数の文字列表現形式を返します.
BigIntegerの進数変換
方法
機能
new BigInteger(str,radix)
指定した進数の文字列は、構築中にのみ大整数に変換できます.
this.toString(radix)
thisを作成文字列に変換
 public static  void main(String[] args)
    {
        BigInteger val=new BigInteger("10000000",2);//                     
        System.out.println(val.toString(16));//               
    }
    ////
      
    80

BigDecimal
構築方法
BigDecimal(String val)
BigDecimalの文字列表現をBigDecimalに変換します.これが最も穏当な方法だ
import java.math.BigDecimal;
import java.util.Scanner;

public class Mainn {
    public static  void main(String[] args)
    {
        //    
        BigDecimal val2=new BigDecimal("123.321");
        System.out.println(val2);

        //    
        Scanner cin=new Scanner(System.in);
        BigDecimal val3;
        val3=cin.nextBigDecimal();
        System.out.println(val3);
    }
}
/////////123.321123.321
     123.321

端数処理
Decimalは小数であるため、いくつかのパラメータが小数部の切り込みを制御する問題が発生します.まず、numをronudingModeに従ってscaleビット小数の切り込みを保持する方法num.setScale(scale,RoundingMode.TYPE);を紹介します.
import java.math.BigDecimal;
import java.util.Scanner;

public class Mainn {
    public static  void main(String[] args)
    {
        //    
        Scanner cin=new Scanner(System.in);
        BigDecimal val=new BigDecimal("1.99999");
        System.out.println(val.setScale(3,BigDecimal.ROUND_UP));//                  
    }
}
///////2.000

パラメータ名
機能
入力
しゅつりょく
ROUND_UP
いつも捨てる数字の前の数字に1を足す.
5.5
6
-1.1
-2
ROUND_DOWN
捨てるべき数字をそのまま捨てる.
5.5
5
-1.1
-1
ROUND_CEILING
結果を増大させる
5.5
6
-1.1
-1
ROUND_FLOOR
結果を減らす
5.5
5
-1.1
-2
ROUND_HALF_UP
捨てられた数に応じて四捨五入する
1.9555
1.956(scale=3)
-1.9555
-1.956(scale=3)
ROUND_HALF_DOWN
捨てられた数に応じて五捨六入する
1.9555
1.955
1.9556
1.956
ROUND_HALF_EVEN
捨てられた数字が「5」であれば、前の桁が偶数に上向きになる
-1.9515
-1.952(scale=3)
1.9515
1.952(scale=3)
捨てられた数字が「5」でない場合、上位は奇数で四捨五入、上位は偶数で五捨六入
1.9534
1.953
1.9536
1.954
1.9543
1.954(5舎6入)
1.9547
1.955
メンバーメソッド
スケールは小数点以下の桁数です
方法
機能
add(BigDecimal augend)
BigDecimalを返します.値は(this+augend)、スケールはmax(this.scale()、augend.scale()です.
subtract(BigDecimal subtrahend)
BigDecimalを返します.値は(this-subtrahend)、スケールはmax(this.scale()、subtrahend.scale()です.
multiply(BigDecimal multiplicand)
BigDecimalを返します.値は(this)です.× multiplicand(this.scale()+multiplicand.scale()のスケール.
divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
BigDecimalを返します.値は(this/divisor)、指定したスケールです.
divide(BigDecimal divisor, RoundingMode roundingMode)
BigDecimalを返します.値は(this/divisor)、スケールはthis.scale()です.
divideToIntegralValue(BigDecimal divisor)
BigDecimalを返します.値は、取得した商値(this/divisor)の整数部分を切り捨てます.
remainder(BigDecimal divisor)
値が(this%divisor)のBigDecimalを返します.
abs()
BigDecimalを返します.このBigDecimalの絶対値のスケールはthis.scale()です.
compareTo(BigDecimal val)
指定したvalと比較します.this>valは1 this=valは0、thisを返します.
doubleValue()
いろんなバリュー...
movePointLeft(int n)
BigDecimalを返します.この値の小数点をnビット左に移動するのと同じです.
movePointRight(int n)
BigDecimalを返します.この値の小数点をnビット右に移動するのと同じです.
pow(int n)
値が(thisn)のBigDecimalを返し、無限の精度でべき乗を正確に計算します.
precision()
このBigDecimalの精度(有効数)を返します.
scale()
このBigDecimalのスケール(小数点以下)を返します.
toBigInteger()
このBigDecimalをBigIntegerに変換
toString()
このBigDecimalの文字列表現を返し、指数が必要な場合は科学的な記数法を使用します.
Java進変換
10進数整数データを任意の進数文字列に変換するのが望ましい
Inter.toString(val,radix);
Long.toString(val,radix);
要求radix<35
this.toString(radix)は、thisが指すBigIntegerオブジェクトを作成文字列に変換します.
public static  void main(String[] args)
    {
        long a=8;
        System.out.println(Long.toString(a,2));
    }
    ////////1000

10進数データvalは2,8,16進数文字列に変換されます.
データ型
方法
目的進数
int
Integer.toBinaryString(val)
バイナリ
Integer.toOctalString(val)
8進法
Integer.toHexString(val)
16進数
Long
Long.toBinaryString(val)
バイナリ
Long.toOctalString(val)
8進法
Long.toHexString(val)
16進数
注意:Javaのlong型データはlong longに対応します.long型定数には接尾辞Lを付けます.たとえば、long val=1億00000万L、intを超えない場合はLを付けません.
public static  void main(String[] args)
    {
        Scanner cin=new Scanner(new BufferedInputStream(System.in));
        Integer a=1024;
        System.out.println(Integer.toBinaryString(a));// a   2     
        System.out.println(Integer.toOctalString(a));//   8  
       System.out.println(Integer.toHexString(a));//   16  
    }
    //////////10000000000
    2000
    400

定式化された文字列を10進数に変換
方法
機能
Integer.parseInt(str,radix)
radixはstrの進数を指定し、int型データに変換し、radixのデフォルトの10進数を省略します.
Double.parseDouble(str,radix)
radixはstrの進数を指定し、double型データに変換し、radixのデフォルトの10進数を省略します.
Long.parseLong(str,radix)
radixはstrの進数を指定し、Long型データに変換し、radixのデフォルトの10進数を省略します.
public static  void main(String[] args)
    {
        String str="10000000";
        //int a=Integer.parseInt(str);
        System.out.println(Integer.parseInt(str));//      10  
        System.out.println(Integer.parseInt(str,8));//      8  
        System.out.println(Long.parseLong(str,16));//      16  
    }
    //////
      :
    10000000
    2097152
    268435456