我是靠谱客的博主 简单水池,最近开发中收集的这篇文章主要介绍java中的BigDecimal类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.什么是BigDecimal

之前我们用到的double和float都可以处理16位的有效数字,然而多数运用于工程中,要求不需要很精确,但是在商业中需要精准运算,因此Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。在做精确运算时,我们不能使用传统的算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。

2.采用浮点运算存在的一些问题

System.out.println(0.2 + 0.1);
输出结果为:

主要原因就是计算机中所有的数字都是二进制表示的,但是浮点数没有办法完全用二进制表示,用二进制表示浮点数会损失一定的精度,就像上面0.1用二进制表示时是无限接近于0.1,就变成了0.2+0.1000000000004。

3.BigDecimal构造器

BigDecimal(int) 创建一个具有参数所指定整数值的对象。

BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象 。

在2中已经说到采用浮点类型表示一个数会存在精度丢失,因此用的·第二种构造方法时也会存在精度丢失问题。所以通常建议第三种构造方法。

 4.常用方法

  4.1 数学运算

public BigDecimal add(BigDecimal value);                     

public BigDecimal subtract(BigDecimal value);                   

public BigDecimal multiply(BigDecimal value);              

public BigDecimal divide(BigDecimal value);                

 四个方法分别对应数学运算中的加减乘除,使用时需要通过一个BigDecimal对象来调用方法。

  4.2 截断和四舍五入

public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal("2.1111111");

        a = a.setScale(4, RoundingMode.HALF_UP);    //保留后4位,并且四舍五入
        System.out.println(a);
    }

注:以上运算生成的结果是一个新的BigDecimal类型,类似于String不可变。

  4.3 实际使用

在开发微信支付的时候设置转账金额都是用BigDecimal

void create(String orderId, BigDecimal amount);

当创建一个订单时:

 payService.create("324132462643", BigDecimal.valueOf(0.01));

这里使用的构造器就是先将double型转变为string。类似于:

new BigDecimal("0.01");

最后

以上就是简单水池为你收集整理的java中的BigDecimal类型的全部内容,希望文章能够帮你解决java中的BigDecimal类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部