bigdicmal除法精度设置_解决浮点运算精度不准确,BigDecimal 加减乘除

package com.kflh.boxApi.utils.util;

import java.math.BigDecimal;

/**

* @program: BoxApi

* @description: 计算浮点数

* @author: eterntiyz

* @create: 2019-01-17 11:10

*/

public class DoubleCalendar {

/**

* @Description: 浮点加法

* @Param: []

* @return: java.lang.Double

* @Author: tonyzhang

* @Date: 2019-01-17 11:27

*/

public static Double add(String str1,String str2) {

BigDecimal bignum1 = new BigDecimal(str1);

BigDecimal bignum2 = new BigDecimal(str2);

BigDecimal bignum3 = bignum1.add(bignum2);

return bignum3.doubleValue();

}

/**

* @Description: 浮点减法

* @Param: []

* @return: java.lang.Double

* @Author: tonyzhang

* @Date: 2019-01-17 11:27

*/

public static Double subtract(String str1,String str2) {

BigDecimal bignum1 = new BigDecimal(str1);

BigDecimal bignum2 = new BigDecimal(str2);

BigDecimal bignum3 = bignum1.subtract(bignum2);

return bignum3.doubleValue();

}

/**

* @Description: 浮点乘法

* @Param: str1为分母,str2为分子

* @return: java.lang.Double

* @Author: tonyzhang

* @Date: 2019-01-17 11:26

*/

public static Double multiply(String str1,String str2) {

BigDecimal bignum1 = new BigDecimal(str1);

BigDecimal bignum2 = new BigDecimal(str2);

BigDecimal bignum3 = bignum1.multiply(bignum2);

return bignum3.doubleValue();

}

/**

* @Description: 浮点除法

* @Param: []

* @return: java.lang.Double

* @Author: tonyzhang

* @Date: 2019-01-17 11:26

*/

public static Double divide(String str1,String str2) {

BigDecimal bignum1 = new BigDecimal(str1);

BigDecimal bignum2 = new BigDecimal(str2);

//参数意义.bignum1为分母,bignum2为分子,scale保留的位数,BigDecimal.ROUND_DOWN表示不进位

BigDecimal bignum3 = bignum1.divide(bignum2,2,BigDecimal.ROUND_DOWN);

return bignum3.doubleValue();

}

public static void main(String[] args) {

System.out.println(divide("4600.0","0.6"));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BigDecimal 是 Java 中用于处理精度问题的类,但是在进行加减乘除运算时,也需要注意精度问题。 1. 加减法精度问题 在进行 BigDecimal 的加减法运算时,需要注意两个 BigDecimal 对象的精度是否相同。如果两个 BigDecimal 对象的精度不同,那么结果的精度可能会有误差。 例如,假设有两个 BigDecimal 对象: BigDecimal a = new BigDecimal("10.123456789"); BigDecimal b = new BigDecimal("0.000000001"); 如果对它们进行加法运算,结果应该是 10.123456790。但是,如果直接使用 a.add(b),会得到一个不精确的结果: BigDecimal c = a.add(b); // 结果可能是 10.123456789 这是因为 a 和 b 的精度不同,导致加法运算时精度丢失。解决方法是将两个 BigDecimal 对象的精度设置为相同的值,如下所示: BigDecimal a = new BigDecimal("10.123456789").setScale(9, RoundingMode.HALF_UP); BigDecimal b = new BigDecimal("0.000000001").setScale(9, RoundingMode.HALF_UP); BigDecimal c = a.add(b); // 结果为 10.123456790 在这里,使用了 setScale 方法将 a 和 b 的精度设置为 9,同时使用了 RoundingMode.HALF_UP 舍入模式来保证精度。 2. 乘除法精度问题 在进行 BigDecimal 的乘除法运算时,也可能会出现精度问题。例如,假设有两个 BigDecimal 对象: BigDecimal a = new BigDecimal("10.0"); BigDecimal b = new BigDecimal("3.0"); 如果对它们进行除法运算,结果应该是 3.3333333333。但是,如果直接使用 a.divide(b),会得到一个不精确的结果: BigDecimal c = a.divide(b); // 结果可能是 3.333333333 这是因为 BigDecimal除法运算默认是保留整数部分,精度有可能丢失。解决方法是使用重载的 divide 方法,指定要保留的小数位数和舍入模式,如下所示: BigDecimal c = a.divide(b, 10, RoundingMode.HALF_UP); // 结果为 3.3333333333 在这里,使用了保留 10 位小数和 RoundingMode.HALF_UP 舍入模式来保证精度。乘法运算也可以使用 setScale 方法来设置精度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值