java 中使用BigDecimal 解决科学计数法问题

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中使用BigDecimal 解决科学计数法问题相关的知识,希望对你有一定的参考价值。

一 BigDecimal的Api

1.1 常用方法介绍

ROUND_CEILING   向正无穷方向舍入

ROUND_DOWN   向零方向舍入

ROUND_FLOOR   向负无穷方向舍入 

ROUND_HALF_DOWN  向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 

ROUND_HALF_UP   向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 

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

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

ROUND_UP   向远离0的方向舍入

案例

BigDecimal decimal = new BigDecimal("3.16974432");//1.98764432
        System.out.println(decimal);
        BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(setScale);

        BigDecimal setScale1 = decimal.setScale(4,BigDecimal.ROUND_HALF_UP);
        System.out.println(setScale1);

 BigDecimal 损失精度、科学计数、去除数字末位0、DecimalFormat等问题(详解)_小情歌i的博客-CSDN博客_bigdecimal科学计数法

二  解决科学计数问题

2.1 案例一

1.代码

     BigDecimal decimal = new BigDecimal("3.16974497273E9");
        System.out.println(decimal);
        BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(setScale);

        BigDecimal setScale1 = decimal.setScale(4,BigDecimal.ROUND_HALF_UP);
        System.out.println(setScale1);

2.结果: 

 2.2  decimal的乘法和减法

1.数据库字段设置decimal

 2.实体

 3.运算

1.四舍五入

   public BigDecimal getScienceDecimalVale(BigDecimal resultValue)
        BigDecimal setScale = resultValue.setScale(2,BigDecimal.ROUND_HALF_UP);
        logger.info("解决科学计算法:  原来值:"+resultValue+" 保留2位小数:"+setScale);
        //  String finishResult= resultValue.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
        //System.out.println("解决科学计算法:"+finishResult);
        return setScale;
    

 2.相减

 3.相乘

 

以上是关于java 中使用BigDecimal 解决科学计数法问题的主要内容,如果未能解决你的问题,请参考以下文章

bigdecimal去除末尾多余的0 ,stripTrailingZeros()科学计数法解决

如何使java中double类型不以科学计数法表示

java BigDecimal用法详解(保留小数,四舍五入,数字格式化,科学计数法转数字等)

科学计数问题解决

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)