1. 程式人生 > >不會丟失精度的BigDecimal之加減乘除

不會丟失精度的BigDecimal之加減乘除

Java在直接進行浮點型運算時,比較容易出現精度丟失的問題,導致意料之外的運算結果;可以使用BigDecimal則提供的方法避免精度丟失。

直接進行浮點型運算時

package test;

public class Demo {
	public static void main(String[] args) {
		test();
	}
	public static void test() {
		System.out.println("加法結果:"+(1.1+2.2));//3.3
		System.out.println("減法結果:"+(2.2-10.1));//-7.9
		System.out.println("乘法結果:"+(1.1*2.2));//2.42
		System.out.println("除法結果:"+(4.4/10));//0.44
	}
}

結果


使用BigDecimal進行浮點型運算時

package test;

import java.math.BigDecimal;

public class BigDecimalDemo{
	public static void main(String[] args) {
		test();
	}
	public static void test() {
		//建構函式的引數是String型別
		//加法
		BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(1.1));
		BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(2.2));
		String str1 = bigDecimal1.add(bigDecimal2).toString();
		//減法
		bigDecimal1 = new BigDecimal(String.valueOf(2.2));
		bigDecimal2 = new BigDecimal(String.valueOf(10.1));
		String str2 = bigDecimal1.subtract(bigDecimal2).toString();
		//乘法
		bigDecimal1 = new BigDecimal(String.valueOf(1.1));
		bigDecimal2 = new BigDecimal(String.valueOf(2.2));
		String str3 = bigDecimal1.multiply(bigDecimal2).toString();
		//除法
		bigDecimal1 = new BigDecimal(String.valueOf(4.4));
		bigDecimal2 = new BigDecimal(String.valueOf(10));
		String str4 = bigDecimal1.divide(bigDecimal2).toString();
		//結果
		System.out.println("加法結果:"+Double.valueOf(str1));
		System.out.println("減法結果:"+Double.valueOf(str2));
		System.out.println("乘法結果:"+Double.valueOf(str3));
		System.out.println("除法結果:"+Double.valueOf(str4));
	}
}

結果


結論:普通的浮點型運算存在精度丟失的問題,在一些要求高的場合無法適用如商業運算,需要使用BigDecimal代替。