不會丟失精度的BigDecimal之加減乘除
阿新 • • 發佈:2019-02-13
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代替。