浮点数计算时损失精度的问题

1 /*
2 浮点数在Java中是以二进制表示的,这样的话就有不少数不能准确表示
3 有的表示的是一个近似的数
4 例如floa型的0.1,用二进制表示是001111011 10011001100110011001101
5 化为十进制是0.100000001490116119384765625
6 所以在一些精密的计算中不能用浮点型直接相加
7 须要借用BigDecimal类
8 */

 浮点数直接相加:ide

1 public class BigDecimal1 {
2     public static void main(String[] args) {
3         System.out.println(0.01+0.09);
4     }
5 
6 }
7 
8 0.09999999999999999

BigDecimal类的成员方法的使用:spa

 1 public class BigDecimal1 {
 2     public static void main(String[] args) {
 3         //建立BigDecimal
 4         BigDecimal bd1=new BigDecimal("0.01");
 5         BigDecimal bd2=new BigDecimal("0.09");
 6         System.out.println("相加的结果为:"+bd1.add(bd2));
 7         System.out.println("相减的结果为:"+bd1.subtract(bd2));
 8         System.out.println("相乘的结果为:"+bd1.multiply(bd2));
 9         System.out.println("相除的结果为:"+bd2.divide(bd1));
10         System.out.println("保留5位小数后相除的结果为:"+bd1.divide(bd2,5, BigDecimal.ROUND_HALF_UP));
11     }
12 
13 }
14 
15 
16 相加的结果为:0.10
17 相减的结果为:-0.08
18 相乘的结果为:0.0009
19 相除的结果为:9
20 保留位数后相除的结果为:0.11111
相关文章
相关标签/搜索