Java知识一

来源:互联网 发布:光线跟踪算法 编辑:程序博客网 时间:2024/05/21 11:18
一、BigDecimal
1.简介

float和double类型的主要涉及目标是为了科学计算和工程计算。然而,他们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是商业计算往往要求结果精确,这时候BigDecimal就派上大用场了。

BigDecimal由任意精度的整数非标度值和32位的整数标度(scale)组成。如果为零或正数,则标度是小数点后的位数;如果为负数,则将该数的非标度值乘以10的负scale次幂,因此,BigDecimal表示的值是unscaledValue X10-scale

2.用法

1)构造函数和加法运算

BigDecimal bd1 = new BigDecimal(12.2);BigDecimal bd2 = new BigDecimal("12.2");System.out.println(bd1);System.out.println(bd2);BigDecimal bd3 = bd1.add(bd2);System.out.println(bd3+"---"+bd1);
输出结果:

12.19999999999999928945726423989981412887573242187512.224.399999999999999289457264239899814128875732421875---12.199999999999999289457264239899814128875732421875
2)用来格式化小数点

BigDecimal bd1 = new BigDecimal(12.23);double value1 = bd1.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();double value2 = bd1.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();double value3 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();double value4 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();System.out.println(value1);System.out.println(value2);System.out.println(value3);System.out.println(value4);
输出结果:

12.012.212.2312.23
即最少小数点后都有一位,最多不超过小数点后总位数。

setScale(1)表示保留一位小数,默认用四舍五入方式 
setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 
setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍

3.总结

1)商业计算使用BigDecimal;
2)尽量使用参数类型为String的构造函数;

3)如String一样,每运算一次产生一个新的对象。



0 0
原创粉丝点击