Java之BigDecimal

Java之BigDecimal

背景:经常看到开发在计算金额的时候,使用的并不是double类型,而是一种叫BigDecimal的类,好奇持续了一段时间,等把手头的事儿告一段落了,返回来搜索了一下。

做了下面这个例子,发现用double来做减法,会损失精度,话说我也是第一次知道double类型的10.0-7.9竟然不等于2.1,好吧,看来还是基础不太牢靠。

package com.daylywork.leetcode;

import java.math.BigDecimal;

public class MyBigD {
    public static void main(String[] args){
        double a = 10.0;
        double b = 7.9;
        System.out.println("两个double做减法="+(a-b));
        BigDecimal c = new BigDecimal(a);
        BigDecimal d =new BigDecimal(b);
        System.out.println("通过double来构造BigDecimal做减法="+c.subtract(d));
        BigDecimal e = new BigDecimal("10.0");
        BigDecimal f = new BigDecimal("7.9");
        System.out.println("通过将double转化为字符串来构造BigDecimal做减法="+e.subtract(f));
        System.out.println("通过将double转化为字符串来构造BigDecimal做加法="+e.add(f));
        System.out.println("通过将double转化为字符串来构造BigDecimal做乘法="+e.multiply(f));
        BigDecimal g = new BigDecimal("10.0");
        BigDecimal i = new BigDecimal("5.0");
        System.out.println("通过将double转化为字符串来构造BigDecimal做除法="+g.divide(i));
        System.out.println("通过将double转化为字符串来构造BigDecimal做除法="+e.divide(f));
    }
}

结果

两个double做减法=2.0999999999999996
通过double来构造BigDecimal做减法=2.0999999999999996447286321199499070644378662109375
通过将double转化为字符串来构造BigDecimal做减法=2.1
通过将double转化为字符串来构造BigDecimal做加法=17.9
通过将double转化为字符串来构造BigDecimal做乘法=79.00
通过将double转化为字符串来构造BigDecimal做除法=2
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
	at java.math.BigDecimal.divide(BigDecimal.java:1693)
	at com.daylywork.leetcode.MyBigD.main(MyBigD.java:21)

Process finished with exit code 1

结论:遇到计算金额的时候,最好是使用BigDecimal

祝自己:每天进步一点点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值