BigDecimal的使用

博客指出在商业计算中,float和double不适用,应使用Java.math包中的BigDecimal进行精确的浮点数计算。介绍了BigDecimal的创建方式,还列举了其加、减、乘、除等方法,以及除法中精确小数点位数和小数取舍模式的设置。
  • 思考:一下程序输出结果是多少?
public class TestBigDecimal{
    public static void main(String[] args){
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1-d2);
    }
}

































[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnLGIHi5-1608466396357)(D:\学习\tupian\bigdecimal\de.png)]












Why???






  • 因为float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。

BigDecimal的使用

  • 位置:Java.math包中。

  • 作用:精确计算浮点数。

  • 创建方式:BigDecimal bd = new BigDecimal(“1.0”);

  • 方法:

      1. BigDecimal add(BigDecimal bd) 加
      1. BigDecimal subtract(BigDecimal bd) 减
      1. BigDecimal multiply(BigDecimal bd) 乘
      1. BigDecimal divide(BigDecimal bd) 除
      • 除法:divide(BigDecimal bd,int scal,RoundingMode mode)
      • 参数scal:指定精确到小数点后几位。
      • 参数mode:
        • 指定小数部分的取舍模式,通常采用四舍五入的模式
        • 取值为BigDecimal.ROUND_HALF_UP
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);

// 面试题
double result = (1.4-0.5)/0.9;
System.out.pritln(result);
// BigDecimal,大的浮点数精确计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");

// 减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);

// 加法
BigDecimal r2 = bd1.add(bd2);
System.out.println(r2);

// 乘法
BigDecimal r3 = bd1.multiply(bd2);
System.out.println(r3);

// 除法
BigDecimal r4 = new BigDecimal("1.4")
    .subtract(new BigDecimal("0.5"))
    .divide(new BigDecimal("0.9"));
System.out.println(r4);

// 因为10除以3会有余数,如果除不尽会出现报错,
// 所以我们这里加了int scal,RoundingMode mode两个参数
BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3")
                                            ,2,BigDecimal
                                           .ROUND_HALF_UP);

BigDecimal类是Java中处理高精度数值运算的强大工具,可执行精确的数学运算,避免浮点数的舍入误差,在金融和科学计算等需要高精度的场合不可或缺。以下是其常见使用方法: ### 初始化BigDecimal对象 可使用不同的构造方法来初始化。例如,使用`new BigDecimal(double)`和`new BigDecimal(String)`: ```java import java.math.BigDecimal; public class BigDecimalInitialization { public static void main(String[] args) { BigDecimal a = new BigDecimal(0.1); System.out.println("a values is:" + a); System.out.println("====================="); BigDecimal b = new BigDecimal("0.1"); System.out.println("b values is:" + b); } } ``` 这里使用`new BigDecimal(String)`能更精确地表示数值,因为`new BigDecimal(double)`可能会有舍入误差[^2]。 ### 基本数学运算 提供了一系列方法进行加法、减法、乘法和除法运算: ```java import java.math.BigDecimal; public class BigDecimalMathOperations { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("130.512"); BigDecimal num2 = new BigDecimal("15.7"); // 加法 BigDecimal sum = num1.add(num2); System.out.println("加法结果: " + sum); // 减法 BigDecimal difference = num1.subtract(num2); System.out.println("减法结果: " + difference); // 乘法 BigDecimal product = num1.multiply(num2); System.out.println("乘法结果: " + product); // 除法(四舍五入保留2位小数) BigDecimal quotient = num1.divide(num2, 2, java.math.RoundingMode.HALF_UP); System.out.println("除法结果: " + quotient); } } ``` 上述代码展示了使用`add`、`subtract`、`multiply`和`divide`方法进行基本数学运算,除法时指定了保留小数位数和舍入模式[^1]。 ### 比较大小 通过`compareTo(BigDecimal)`方法来比较大小: ```java import java.math.BigDecimal; import org.junit.Test; public class BigDecimalComparison { @Test public void test4() { BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("2"); BigDecimal c = new BigDecimal("1"); int result1 = a.compareTo(b); int result2 = a.compareTo(c); int result3 = b.compareTo(a); System.out.println(result1); // -1 System.out.println(result2); // 0 System.out.println(result3); // 1 } } ``` 使用该方法时,若返回值为 -1 表示小于,0 表示等于,1 表示大于。需注意不能使用`equals`方法来比较大小,同时使用BigDecimal性能比`double`和`float`差,处理庞大、复杂运算时尤为明显,要根据实际需求选择使用哪种类型[^3]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值