Android基础Java 基础

Java 常用类 07. Java BigDecimal类(浮点

2021-12-18  本文已影响0人  yjtuuige

问题:

//浮点数计算遇到的问题
package com.base.demo04;

public class Test10 {
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println("d1:" + d1);
        System.out.println("d2:" + d2);
        System.out.println("d1-d2:" + (d1 - d2));
        double result = (1.4 - 0.5) / 0.9;
        System.out.println(result);
    }
}

分析:

解决:引入 BigDecimal 类

BigDecimal

常用方法

方法 描述
public BigDecimal add(BigDecimal augend) 加法
public BigDecimal subtract(BigDecimal subtrahend) 减法
public BigDecimal multiply(BigDecimal multiplicand) 乘法
public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode) 除法。divisor:除数。scale:精确度。roundingMode:结果的舍入模式。

注意:在进行除法运算时,结果为除不尽的数,且未标明保留几位小数(或使用舍入的方式),会抛出的异常

常量 描述
ROUND_HALF_UP 四舍五入
ROUND_UP 直接进位
ROUND_DOWN 直接舍弃
ROUND_HALF_DOWN 舍弃部分 > 0.5 进位,否则舍弃
package com.base.demo04;

import java.math.BigDecimal;

public class Test10 {
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println("================= double ==================");
        System.out.println("d1:" + d1);
        System.out.println("d2:" + d2);
        System.out.println("d1-d2:" + (d1 - d2));
        double result = (1.4 - 0.5) / 0.9;
        System.out.println("double 类型计算 ");
        System.out.println("(1.4 - 0.5) / 0.9 --> " + result);
        System.out.println("=================BigDecimal==================");
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 = new BigDecimal("0.9");
        // 1.subtract(); 减法
        BigDecimal r1 = bd1.subtract(bd2);
        System.out.println(bd1 + " - " + bd2 + " = " + r1);
        // 2.add(); 加法
        BigDecimal r2 = bd1.add(bd2);
        System.out.println(bd1 + " + " + bd2 + " = " + r2);
        // 3.multiply(); 乘法
        BigDecimal r3 = bd1.multiply(bd2);
        System.out.println(bd1 + " x " + bd2 + " = " + r3);
        // 4.divide(); 除法
        BigDecimal r4 = new BigDecimal("1.4")
                .subtract(new BigDecimal("0.5"))
                .divide(bd2);
        System.out.println("(1.4 - 0.5)/ " + bd2 + " = " + r4);
        BigDecimal r5 = new BigDecimal("20")
                // Java 8 以后改为 RoundingMode.HALF_UP
                .divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP);
        System.out.println("20 / 3 " + " = " + r5 + " 四舍五入");
        // double 值为参数传入 BigDecimal
        System.out.println("========= double 值为参数传入 BigDecimal =========");
        BigDecimal r6 = new BigDecimal(d1);
        BigDecimal r7 = new BigDecimal(d2);
        System.out.println(r6);
        System.out.println(r7);
        System.out.println(r6.add(r7));
    }
}

分析:

补充其他方法:BigDecimal.setScale(); 用于格式化小数点

// Java 8 以后改为 RoundingMode.HALF_UP
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) 舍弃部分,> 0.5 进位,否则舍弃。2.35 变成 2.3

总结

上一篇下一篇

猜你喜欢

热点阅读