BigDecimal工具类

下边两篇文章对BigDecimal做了一个很好的总结,可以先看一下这两篇文章

Java中BigDecimal的使用

BigDecimal 舍入模式(Rounding mode)介绍

https://blog.csdn.net/guanmjie/article/details/4458604

另外在转类型的时候,用到什么精度就是什么精度,不要进行额外的转换,否则还会出现精度问题

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 
 * @Description: 计算
 */
public class MathUtil {

  /**
   * 保留两位小数
   * 传double的时候 精度会损失。。所以tostring
   */
  public static float truncate(float v1, int number) {
    BigDecimal bg = new BigDecimal(Float.toString(v1)).setScale(number, RoundingMode.DOWN);
    return bg.floatValue();
  }

  /**
   * 保留两位小数
   * 传double的时候 精度会损失。。所以tostring
   */
  public static double truncate(double v1, int number) {
    BigDecimal bg = new BigDecimal(Double.toString(v1)).setScale(number, RoundingMode.DOWN);
    return bg.doubleValue();
  }


  /**
   * 两个 double 相减    避免   2.0 - 1.1 问题
   */
  public static float subtract(float v1, float v2) {
    BigDecimal b1 = new BigDecimal(Float.toString(v1));
    BigDecimal b2 = new BigDecimal(Float.toString(v2));
    return b1.subtract(b2).floatValue();
  }


  /**
   * 两个 double 相减    避免   2.0 - 1.1 问题
   */
  public static double subtract(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.subtract(b2).doubleValue();
  }

  /**
   * 两个 float 相加  避免  3.6 + 0.4 问题
   */
  public static float add(float v1, float v2) {
    BigDecimal b1 = new BigDecimal(Float.toString(v1));
    BigDecimal b2 = new BigDecimal(Float.toString(v2));
    return b1.add(b2).floatValue();
  }

  /**
   * 两个 double 相加  避免  3.6 + 0.4 问题
   */
  public static BigDecimal add(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2);
  }

  /**
   * 乘法
   */
  public static BigDecimal multiply(float v1, float v2) {
    BigDecimal b1 = new BigDecimal(Float.toString(v1));
    BigDecimal b2 = new BigDecimal(Float.toString(v2));
    return b1.multiply(b2);
  }

  public static BigDecimal multiply(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2);
  }

  public static BigDecimal multiplyBig(BigDecimal b1, double v2) {
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2);
  }

  /**
   * 除法
   */
  public static float divide(float v1, float v2) {
    BigDecimal b1 = new BigDecimal(Float.toString(v1));
    BigDecimal b2 = new BigDecimal(Float.toString(v2));
    return b1.divide(b2).setScale(2).floatValue();
  }

  public static BigDecimal divide(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.divide(b2);
  }
  
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值