package it.crazyjava.ch07;
import java.math.BigDecimal;
public class TestBigDecimal {
/**
* @param args
*/
public static void main(String[] args) {
double a = 0.01;
double b = 0.05;
BigDecimal b1 = new BigDecimal(a);
BigDecimal b2 = new BigDecimal(b);
double r1 = b1.multiply(b2).doubleValue();
double r2 = b1.divide(b2).doubleValue();
double r3 = b1.add(b2).doubleValue();
double r4 = b1.subtract(b2).doubleValue();
double r11 = a*b;
double r22 = a/b;
double r33 = a+b;
double r44 = a-b;
System.out.println(r1);
System.out.println(r2);
System.out.println(r3);
System.out.println(r4);
System.out.println(r11);
System.out.println(r22);
System.out.println(r33);
System.out.println(r44);
}
}
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1514)
at it.crazyjava.ch07.TestBigDecimal.main(TestBigDecimal.java:16)
import java.math.BigDecimal;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
double a = 0.01;
double b = 0.05;
BigDecimal b1 = new BigDecimal(String.valueOf(a));
BigDecimal b2 = new BigDecimal(String.valueOf(b));
double r1 = b1.multiply(b2).doubleValue();
double r2 = b1.divide(b2).doubleValue();
double r3 = b1.add(b2).doubleValue();
double r4 = b1.subtract(b2).doubleValue();
double r11 = a*b;
double r22 = a/b;
double r33 = a+b;
double r44 = a-b;
System.out.println(r1);
System.out.println(r2);
System.out.println(r3);
System.out.println(r4);
System.out.println(r11);
System.out.println(r22);
System.out.println(r33);
System.out.println(r44);
}
}
//使用BigDecimal求取精确小数的时候一定要注意构造方法中要用字符串来构造。
Non-terminating decimal expansion; no exact representable decimal result
翻译过来就是没有终止的小数扩展;没有精确的可表达的小数结果。
如果构造的时候采用字符串就不会出现精度问题了。