JavaにおけるDouble計算の保持後の小数ビットのいくつかの方法
2548 ワード
Doubleタイプを返します
1.四捨五入 BigDecimal.ROUND_HALF_UP表示四捨五入、BigDecimal.ROUND_HALF_DOWNも五舎六入、BigDecimal.ROUND_UPはキャリー処理(つまり1を直接加算)を表し、BigDecimal.ROUND_DOWNは直接端数を除くことを示す.
Stringタイプを返す
1.#0.00は保留後の2桁を表し、その処理方式は不要な末尾数を直接切り取り、四捨五入しない.
2.%2 fは保留後の2桁を表し、四捨五入できる.
.RoundingMode.HALF_DOWNは五捨六入を表し、負数は絶対値を取ってから五捨六入してから負数を表し、RoundingMode.HALF_UP:四捨五入、負数は絶対値を取ってから五捨六入してから負数を表す.
1.四捨五入
public static void main(String[] args) {
double avg = avg(32.0, 20, 40);
System.out.println(avg);// :30.666666666666668
avg = (double) Math.round(avg * 100) / 100;
System.out.println(avg);// :30.67
}
/**
* ,
*/
public static double avg(double... source) {
double sum = 0;
for (double s : source) {
sum = sum + s;
}
return sum / source.length;
}
public static void main(String[] args) {
double avg = avg(32.0, 20, 40);
System.out.println(avg);//30.666666666666668
// BigDecimal
BigDecimal b = new BigDecimal(avg);
avg = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(avg);//30.67
}
/**
* ,
*/
public static double avg(double... source) {
double sum = 0;
for (double s : source) {
sum = sum + s;
}
return sum / source.length;
}
Stringタイプを返す
1.#0.00は保留後の2桁を表し、その処理方式は不要な末尾数を直接切り取り、四捨五入しない.
public static void main(String[] args) {
double avg = avg(32.0, 20, 40);
System.out.println(avg);//30.666666666666668
//3.#.00 , , 。
DecimalFormat data=new DecimalFormat("#.00");
String str=data.format(avg);
System.out.println(avg);//30.666666666666668
}
2.%2 fは保留後の2桁を表し、四捨五入できる.
public static void main(String[] args) {
double avg = avg(32.0, 20, 40);
System.out.println(avg);//30.666666666666668
// %.2f , 。
String str = String.format("%.2f", avg);
System.out.println(str);//30.67
}
.RoundingMode.HALF_DOWNは五捨六入を表し、負数は絶対値を取ってから五捨六入してから負数を表し、RoundingMode.HALF_UP:四捨五入、負数は絶対値を取ってから五捨六入してから負数を表す.
public static void main(String[] args) {
double avg = avg(32.0, 20, 40);
System.out.println(avg);//30.666666666666668
NumberFormat data=NumberFormat.getCurrencyInstance();
//
data.setMaximumFractionDigits(2);
// , RoundingMode.DOWN
data.setRoundingMode(RoundingMode.UP);
System.out.println(data.format(avg));//¥30.67
}