资讯专栏INFORMATION COLUMN

使用BigDecimal处理Java中的小数

用户84 / 684人阅读

摘要:在中处理带小数的数据时,通常会碰到需要进行对数据进行四舍五入或者截取等操作。提供了一个的方法,很方便的帮助我们实现想要的操作。

在Java中处理带小数的数据时,通常会碰到需要进行对数据进行四舍五入或者截取等操作。BigDecimal提供了一个setScale()的方法,很方便的帮助我们实现想要的操作。

通常用到的是下面的方法

  

setScale(int newScale, int roundingMode)
- newScale:保留的小数位数
- roundingMode:精度取值方式

当roundingMode缺省时,默认使用四舍五入的方式,例如:

  

setScale(1)表示保留一位小数,默认用四舍五入方式

roundingMode的取值有一下几个:

  

ROUND_CEILING
大于等于该数的那个最近值

ROUND_DOWN
正数是小于等于该数的那个最近数,负数是大于等于该数的那个最近数

ROUND_FLOOR
小于等于该数的那个值

ROUND_HALF_DOWN
五舍六入

ROUND_HALF_EVEN
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN

ROUND_HALF_UP
四舍五入

ROUND_UNNECESSARY
计算结果是精确的,不需要舍入模式

ROUND_UP
和ROUND_DOWN相反

我们在实际应用的时候可以通过方法对其进行封装,方便直接调用:

java    /**
     * 对double数据进行取精度, 保留2位小数, 精度取值方式 BigDecimal.ROUND_HALF_UP
     * @param value double数据
     * @return 精度计算后的数据
     */
    public static double round(double value) {
        return round(value, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 对double数据进行取精度
     * @param value double数据
     * @param scale 精度位数(保留的小数位数)
     * @param roundingMode 精度取值方式
     * @return 精度计算后的数据
     */
    public static double round(double value, int scale, int roundingMode) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(scale, roundingMode);
        double d = bd.doubleValue();
        bd = null;
        return d;
    }

原文地址:使用BigDecimal处理Java中的小数

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64355.html

相关文章

  • 高精度数学运算

    摘要:使用,保证精度的同时,能精准的进行四舍六入计算。类精确的数学运算使用来实现精准度因为精度的原因构造方法的结果有一定的不可预知性,例如因此建议使用。算法规则四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。 四舍六入计算 算法规则: 四舍六入五考虑, 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一。 使用BigDecimal,保证精度的...

    liaosilzu2007 评论0 收藏0
  • BigDecimal遇到的问题,大伙也说说

    摘要:舍入方式需要弄明白自己的业务才用,别为了用而随便选一个用四舍五入模式从零四舍五入。原值结论都是向前进一位四舍五入到正无穷。 一:相除精度丢失的问题  BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题:   问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333......除不尽,这里不能让电脑一直除不尽,所以BigDecimal...

    harriszh 评论0 收藏0
  • 180706-BigDecimal除法的精度问题

    摘要:除法的精度问题在使用的除法时,遇到一个鬼畜的问题,本以为的精度计算,结果使用返回,当然最终发现还是自己的使用姿势不对导致的,因此记录一下,避免后面重蹈覆辙问题抛出在使用做高精度的除法时,一不注意遇到了一个小问题,如下上面的输出是什么 showImg(https://segmentfault.com/img/remote/1460000015555232); BigDecimal除法的精...

    imccl 评论0 收藏0
  • Java和Python中的整数除法,取余,舍入

    摘要:整数除法对两个不能整除的整数做除法,就要面对舍入的问题。中的舍入除了缺省的舍入方式,还有多种舍入可供选择。就是说,我们输入的十进制数,在计算机内部都是用二进制来表示的。 关于除法,你也许觉得没什么值得谈论的,毕竟小学的时候体育老师就教过我们了。然而对于编程中使用的除法,我觉得还是有很多值得注意的细节的。为什么我想深究一下?因为我日常主要使用Java和Python编程,而它们的除法在细节...

    hosition 评论0 收藏0
  • Java和Python中的整数除法,取余,舍入

    摘要:整数除法对两个不能整除的整数做除法,就要面对舍入的问题。中的舍入除了缺省的舍入方式,还有多种舍入可供选择。就是说,我们输入的十进制数,在计算机内部都是用二进制来表示的。 关于除法,你也许觉得没什么值得谈论的,毕竟小学的时候体育老师就教过我们了。然而对于编程中使用的除法,我觉得还是有很多值得注意的细节的。为什么我想深究一下?因为我日常主要使用Java和Python编程,而它们的除法在细节...

    lentoo 评论0 收藏0

发表评论

0条评论

用户84

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<