Java API:BigDecimal

Java API:BigDecimal

1 BigDecimal

  • BigDecimal类使用户完全控制舍入行为。 如果未指定舍入模式,并且无法表示确切的结果,则抛出异常; 否则,可以通过向操作提供适当的MathContext对象来进行计算,以选择精度和舍入模式。 在这两种情况下,都提供了八种舍入方式来控制舍入。 使用此类中的整数字段(如ROUND_HALF_UP )表示舍入模式已经过时了; 应该使用RoundingMode 枚举 (如RoundingMode.HALF_UP)的枚举值。

  • 构造方法:

    BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
    
  • 常用方法

    Modifier and Type Field and Description
    static int ROUND_DOWN 舍入模式向零舍入。
    static int ROUND_FLOOR 舍入模式向负无穷大转弯。
    static int ROUND_HALF_UP 四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距的,在这种情况下是圆括弧的。
    static int ROUND_UP 舍入模式从零开始。
    static BigDecimal TEN 值为10,标度为0。
    static BigDecimal ZERO 值为0,标度为0。

2 示例

package com.fcarey.api;

import java.math.BigDecimal;

public class MyBigDecimal {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal(2.46);
        BigDecimal b = new BigDecimal(1.23);
        System.out.println(a.add(b));  // 输出:3.68999999999999994...
        System.out.println(a.subtract(b));  // 输出:1.22999999999999998223643160...
        System.out.println(a.multiply(b));  // 输出:3.0257999999999999126032435015076777...
        System.out.println(a.divide(b));  // 输出:2
        // 如果要精确运算需要使用字符串的构造
        BigDecimal c = new BigDecimal("2.46");
        BigDecimal d = new BigDecimal("1.23");
        System.out.println(c.add(d));  // 输出:3.69
        System.out.println(c.subtract(d));  // 输出:1.23
        System.out.println(c.multiply(d));  // 输出:3.0258
        System.out.println(c.divide(d));  // 输出:2
        BigDecimal e = new BigDecimal("10.0");
        BigDecimal f = new BigDecimal("3.0");
        System.out.println(e.divide(f,2,BigDecimal.ROUND_UP));;  // 输出:3.34
        System.out.println(e.divide(f,2,BigDecimal.ROUND_FLOOR));;  // 输出:3.33
        System.out.println(e.divide(f,2,BigDecimal.ROUND_HALF_UP));;  // 输出:3.33
    }
}

posted @ 2024-09-02 21:02  f_carey  阅读(7)  评论(0编辑  收藏  举报