这段代码为什么会报错?

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)

package com.sun;
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
翻译过来就是没有终止的小数扩展;没有精确的可表达的小数结果。
如果构造的时候采用字符串就不会出现精度问题了。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网