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に変換します.
メンバーメソッド
方法
機能
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を作成文字列に変換
BigDecimal
構築方法
BigDecimal(String val)
BigDecimalの文字列表現をBigDecimalに変換します.これが最も穏当な方法だ
端数処理
Decimalは小数であるため、いくつかのパラメータが小数部の切り込みを制御する問題が発生します.まず、numをronudingModeに従ってscaleビット小数の切り込みを保持する方法
パラメータ名
機能
入力
しゅつりょく
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オブジェクトを作成文字列に変換します.
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を付けません.
定式化された文字列を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進数を省略します.
任意の精度整数アルゴリズム(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と比較します.this
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.321
:123.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