Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入

简介: 工具类package ……;import java.math.BigDecimal;/*** Created by kongqw on 2015/12/10.

工具类

package ……;

import java.math.BigDecimal;

/**
* Created by kongqw on 2015/12/10.
*/
public final class BigDecimalUtil {
  private BigDecimalUtil() {
  }

  /**
   * 加法运算
   *
   * @param d1 d1
   * @param d2 d2
   * @return
   */
  public static double add(double d1, double d2) {
      BigDecimal b1 = new BigDecimal(d1);
      BigDecimal b2 = new BigDecimal(d2);
      return b1.add(b2).doubleValue();
  }

  /**
   * 减法运算
   *
   * @param d1 d1
   * @param d2 d2
   * @return
   */
  public static double sub(double d1, double d2) {
      BigDecimal b1 = new BigDecimal(d1);
      BigDecimal b2 = new BigDecimal(d2);
      return b1.subtract(b2).doubleValue();
  }

  /**
   * 乘法运算
   *
   * @param d1 d1
   * @param d2 d2
   * @return
   */
  public static double mul(double d1, double d2) {
      BigDecimal b1 = new BigDecimal(d1);
      BigDecimal b2 = new BigDecimal(d2);
      return b1.multiply(b2).doubleValue();
  }

  /**
   * 除法运算
   *
   * @param d1  被除数
   * @param d2  除数
   * @param len 保留几位有效小数
   * @return
   */
  public static double div(double d1, double d2, int len) {
      BigDecimal b1 = new BigDecimal(d1);
      BigDecimal b2 = new BigDecimal(d2);
      // BigDecimal.ROUND_HALF_UP 舍入模式
      return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
  }

  /**
   * 四舍五入操作
   *
   * @param d   要操作的数
   * @param len 保留几位有效数字
   * @return
   */
  public static double round(double d, int len) {
      BigDecimal b1 = new BigDecimal(d);
      BigDecimal b2 = new BigDecimal(1);
      // 任何一个数字除以1都是原数字
      // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
      return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
}
相关文章
|
4月前
|
存储 Java
百度搜索:蓝易云【Java语言之float、double内存存储方式】
由于使用IEEE 754标准进行存储,float和double类型可以表示非常大或非常小的浮点数,并且具有一定的精度。然而,由于浮点数的特性,它们在进行精确计算时可能会存在舍入误差。在编写Java程序时,需要注意使
59 0
|
1月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
34 1
|
6月前
|
存储 C语言
C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
33 1
|
4月前
|
XML Java 数据库连接
Type mismatch Can‘t assign java.math.BigDecimal to java.lang.Double
Type mismatch Can‘t assign java.math.BigDecimal to java.lang.Double
37 0
|
5月前
|
存储 C语言
计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小。
43 1
|
5月前
|
Java
Java对double值进行四舍五入,保留两位小数的几种方法
Java对double值进行四舍五入,保留两位小数的几种方法
|
5月前
|
Java
float与double精度丢失问题
float与double精度丢失问题
|
6月前
float和double的区别
float和double的区别
55 0
|
6月前
|
Java Spring 容器
解决java.lang.StackOverflowError at java.base/java.lang.Double.doubleToRawLongBits(Native Method)问题~
解决java.lang.StackOverflowError at java.base/java.lang.Double.doubleToRawLongBits(Native Method)问题~
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)