栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中的BigDecimal类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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");

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/878525.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号