import java.math.BigDecimal; public class TestBigDecimal { public static void main(String[] args) { System.out.println(2.1 - 1.1); System.out.println(2.0 - 1.1); BigDecimal bigDecimal = new BigDecimal(2.1 - 1.1); System.out.println(bigDecimal); BigDecimal bigDecimal1 = new BigDecimal(2.0 - 1.1); System.out.println(bigDecimal1); } } 结果: 1.0 0.8999999999999999 1 0.899999999999999911182158029987476766109466552734375从结果来看BigDecimal bigDecimal1 = new BigDecimal(2.0 - 1.1); 还是没有精确的
BigDecimal bigDecimal1 = new BigDecimal("2.0"); BigDecimal bigDecimal2 = new BigDecimal("1.1"); //BigDecimal bigDecimal2 = BigDecimal.valueOf(1.1); System.out.println(bigDecimal1.add(bigDecimal2.negate())); System.out.println(new BigDecimal(1.1)); 从红色这句,你应该可以看出点东西 new BigDecimal(double a) a 存进去的时候已经损失了精度,所以使用时用以下两种方式 1 . new BigDecimal("1.1") 2 . BigDecimal.valueOf(1.1)
你用BigDecimal类来包装一下。
import java.math.BigDecimal;
public class TestBigDecimal {
public static void main(String[] args)
{
System.out.println(2.1 - 1.1);
System.out.println(2.0 - 1.1);
BigDecimal bigDecimal = new BigDecimal(2.1 - 1.1);
System.out.println(bigDecimal);
BigDecimal bigDecimal1 = new BigDecimal(2.0 - 1.1);
System.out.println(bigDecimal1);
}
}
结果:
1.0
0.8999999999999999
1
0.899999999999999911182158029987476766109466552734375从结果来看BigDecimal bigDecimal1 = new BigDecimal(2.0 - 1.1);
还是没有精确的
BigDecimal bigDecimal2 = new BigDecimal("1.1");
//BigDecimal bigDecimal2 = BigDecimal.valueOf(1.1);
System.out.println(bigDecimal1.add(bigDecimal2.negate()));
System.out.println(new BigDecimal(1.1));
从红色这句,你应该可以看出点东西
new BigDecimal(double a) a 存进去的时候已经损失了精度,所以使用时用以下两种方式
1 . new BigDecimal("1.1")
2 . BigDecimal.valueOf(1.1)
BigDecimal 提供适用于货币计算和类似计算的任意精度的有符号十进制数字
double d1 = 2.0;
double d2 = 1.1;
BigDecimal bd1 = new BigDecimal(d1+"");
BigDecimal bd2 = new BigDecimal(d2+"");
System.out.println(
bd1.subtract(bd2).doubleValue());
double d1 = 2.0;
double d2 = 1.1;
BigDecimal bd1 = new BigDecimal(d1+"");
BigDecimal bd2 = new BigDecimal(d2+"");
System.out.println(
bd1.subtract(bd2).doubleValue());
System.out.println(2.1-1.1);
System.out.println(2.0-1.1);
System.out.println(2.2-1.1);
System.out.println(2.2-1.3);结果:
1.0
0.8999999999999999
1.1
0.9000000000000001
问题:同样是double运算,为何1和3行输出正常,2和4行却是这样的。
import java.math.BigDecimal;
public class TestNumber {
public static void main(String[] args) {
double d1 = 2.0;
double d2 = 1.1;
BigDecimal bd1 = new BigDecimal(d1+"");
BigDecimal bd2 = new BigDecimal(d2+"");
System.out.println(
bd1.subtract(bd2).doubleValue());
}}
具体可以看这篇文章
http://blog.sina.com.cn/s/blog_5a3640220100c5ro.html