BigDecimal用法 及其如何解决java数据精确计算

来源:互联网 发布:端口不通怎么办 编辑:程序博客网 时间:2024/06/15 21:54

BigDecimal用法 及其如何解决java数据精确算法

一 传统的算法

public class BigDecimalDemo {    public static void main(String[] args) {        System.out.println(0.09 + 0.01);        System.out.println(1.0 - 0.32);        System.out.println(1.015 * 100);        System.out.println(1.301 / 100);        System.out.println(5/4);        System.out.println(1.0 - 0.12);    }}

==输出结果==

0.099999999999999990.6799999999999999101.499999999999990.01300999999999999910.88

二 BigDecimal 用法

/* * 看程序写结果:结果和我们想的有一点点不一样,这是因为float类型的数据存储和整数不一样导致的。它们大部分的时候,都是带有有效数字位。 *  * 由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal *  * BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。 *//* * 构造方法: *      public BigDecimal(String val) *  * public BigDecimal add(BigDecimal augend) * public BigDecimal subtract(BigDecimal subtrahend) * public BigDecimal multiply(BigDecimal multiplicand) * public BigDecimal divide(BigDecimal divisor) * public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):商,几位小数,如何舍取 */public class BigDecimalDemo {    public static void main(String[] args) {        // System.out.println(0.09 + 0.01);        // System.out.println(1.0 - 0.32);        // System.out.println(1.015 * 100);        // System.out.println(1.301 / 100);        BigDecimal bd1 = new BigDecimal("0.09");        BigDecimal bd2 = new BigDecimal("0.01");        System.out.println("add:" + bd1.add(bd2));        System.out.println("-------------------");        BigDecimal bd3 = new BigDecimal("1.0");        BigDecimal bd4 = new BigDecimal("0.32");        System.out.println("subtract:" + bd3.subtract(bd4));        System.out.println("-------------------");        BigDecimal bd5 = new BigDecimal("1.015");        BigDecimal bd6 = new BigDecimal("100");        System.out.println("multiply:" + bd5.multiply(bd6));        System.out.println("-------------------");        BigDecimal bd7 = new BigDecimal("1.301");        BigDecimal bd8 = new BigDecimal("100");        System.out.println("divide:" + bd7.divide(bd8));        System.out.println("divide:"                + bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));          // 参数说明  第二参数代表小数点后留几位   最后以为代表 采用的方式(四舍五入的方法)        System.out.println("divide:"                + bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));    }}

==输出结果==

add:0.10-------------------subtract:0.68-------------------multiply:101.500-------------------divide:0.01301divide:0.013divide:0.01301000
原创粉丝点击