小数数据精度问题Double与BigDecimal

做项目的过程中涉及到小数问题的时候,一般我都用Double类型,但是经常出现*.999999998这种数据,然后自己再手动四舍五入,简直傻的要死。

明明就是一个1.51-1.38的问题,很简单怎么会得出这么古怪的数?该怎么做才不出现这种数?答案就是BigDecimal.

Double类型的数据使用二进制表示的,它不可能将0.1或者10的其他任何次负幂,精确表示为一个有限长度的二进制小数。所以1.51-1.38出现0.13000000000000012的结果,如果是涉及到金钱的项目,这肯定不行的,那要如何做呢?

1 Double a = 1.51,b=1.38;
2         System.out.println(a-b);
3         BigDecimal a1 = BigDecimal.valueOf(a);
4         BigDecimal b1 = BigDecimal.valueOf(b);
5         System.out.println(a1.subtract(b1));

结果是

0.13000000000000012
0.13

 

posted @ 2017-03-02 16:25  浅夏丶未央  阅读(1204)  评论(0编辑  收藏  举报