`
splinter_2
  • 浏览: 58973 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

double值的精确计算 bigdecimal

UP 
阅读更多

//表示需要精确到小数点以后几位
 public static final int scale = 2;
 /**
     * 提供精确的加法运算。
     * @param v1 被加数
     * @param v2 加数
     * @return 两个参数的和
     */

 public static double addDouble(double d1,double d2){
  BigDecimal bd1 = new BigDecimal(Double.toString(d1));
  BigDecimal bd2 = new BigDecimal(Double.toString(d2));
  return bd1.add(bd2).doubleValue();
 }
 /**
     * 提供精确的减法运算。
     * @param v1 被减数
     * @param v2 减数
     * @return 两个参数的差
     */

 public static double subDouble(double d1,double d2){
  BigDecimal bd1 = new BigDecimal(Double.toString(d1));
  BigDecimal bd2 = new BigDecimal(Double.toString(d2));
  return bd1.subtract(bd2).doubleValue();
 }
 /**
     * 提供精确的乘法运算。
     * @param v1 被乘数
     * @param v2 乘数
     * @return 两个参数的积
     */

 public static double mulDouble(double d1,double d2){
  BigDecimal bd1 = new BigDecimal(Double.toString(d1));
  BigDecimal bd2 = new BigDecimal(Double.toString(d2));
  return bd1.multiply(bd2).doubleValue();
 }
 /**
     * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
     * 小数点以后10位,以后的数字四舍五入。
     * @param v1 被除数
     * @param v2 除数
     * @return 两个参数的商
     */

 public static double divDouble(double d1,double d2){
  return div(d1,d2,scale);
 }
 
 /**
     * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
     * 定精度,以后的数字四舍五入。
     * @param v1 被除数
     * @param v2 除数
     * @param scale 表示表示需要精确到小数点以后几位。
     * @return 两个参数的商
     */
    public static double div(double v1,double v2,int scale){
        if(scale<0){
            throw new IllegalArgumentException(
                "The scale must be a positive integer or zero");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }

 
 /**
     * 提供精确的小数位四舍五入处理。
     * @param v 需要四舍五入的数字
     * @param scale 小数点后保留几位
     * @return 四舍五入后的结果
     */
    public static double round(double v,int scale){
        if(scale<0){
            throw new IllegalArgumentException(
                "The scale must be a positive integer or zero");
        }
        BigDecimal b = new BigDecimal(Double.toString(v));
        BigDecimal one = new BigDecimal("1");
        return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }

分享到:
评论

相关推荐

    BigDecimal向Double转换

    它可以处理非常大的数字以及需要精确计算的场景,例如财务计算中常见的货币值。 ### 1.2 BigDecimal的主要用途 - **金融计算**:由于货币计算通常需要非常高的精度,BigDecimal非常适合这类应用场景。 - **科学...

    BigDecimal的计算

    在Java中,`BigDecimal` 类提供了对超过16位有效数字的十进制数进行精确算术运算的能力。它适用于金融计算、科学计算等场景,在这些场景中,使用浮点数(如 `float` 和 `double`)可能会因为精度丢失而导致错误的...

    运用BigDecimal精确计算

    这篇博客将深入探讨`BigDecimal`的使用,以及如何通过它来实现精确计算。 `BigDecimal`是Java `java.math`包下的一个类,它提供了任意精度的有符号十进制数。其设计目标是支持任意精度的算术运算,确保结果的精确性...

    BigDecimal加减乘除计算

    在进行高精度计算时,BigDecimal 避免了浮点数计算的精度问题,提供了更精确的结果。需要注意的是,所有涉及到 BigDecimal 的运算都会创建新的对象,所以频繁操作可能会带来性能影响。为了优化性能,可以使用 `...

    BigDecimal计算

    由于浮点数(如`float`和`double`)在计算机中是以近似值存储的,这可能导致计算结果的不精确性,尤其是在进行货币计算时。`BigDecimal`解决了这个问题,提供了精确的十进制运算。 `BigDecimal`对象由一个非空的十...

    bigdecimal

    1. **构造方法**: 在构造 `BigDecimal` 对象时,推荐使用 `Double.toString()` 来转换 `double` 类型的值,因为直接传递 `double` 值可能会导致意外的结果。 2. **舍入模式**: `BigDecimal.ROUND_HALF_UP` 表示四...

    精确计算Double型数据

    精确计算Double型数据,可用于货币计算

    Java 精确计算-double-float-String

    标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    BigDecimal工具类.docx

    BigDecimal工具类提供了多种精确的数学运算方法,满足了我们在实际开发中对高精确计算的需求。同时,该工具类还提供了很多实用的方法,使得我们可以更方便地进行数学运算。 知识点: 1. BigDecimal工具类是Java中...

    精确计算工具类

    Android 精确计算工具类。 /** * @Title: Arith.java * @Package com.uxun.pay.util * @Description: TODO(用一句话描述该文件做什么) * @author daiw * @date 2016-1-5 上午9:05:34 * @version V1.0 */ ...

    BigDecimal使用

    2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 String 类型的数值转换为 BigDecimal 对象。 3. 精确的加法运算:使用 BigDecimal 的 add 方法可以进行精确的加法运算,例如将...

    BigDecimal 加减乘除运算

    float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的...

    java_double_精度

    BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.add(bd2).doubleValue(); } public double sub(double d1, double d2) { ...

    使用BigDecimal进行精确运算(实现加减乘除运算)

    BigDecimal是Java中用于进行高精度、精确浮点数运算的类,它解决了浮点数在二进制表示下无法精确表示所有十进制数的问题。...在不需要精确计算的场合,仍然推荐使用float和double以获取更好的性能。

    Java实现的浮点类的精确计算

    总结一下,Java中的浮点数精确计算主要是通过`java.math.BigDecimal`类来实现的,而"Java实现的浮点类的精确计算"则可能是一个自定义工具类,封装了`BigDecimal`的操作,以提供方便、准确的浮点数计算服务。...

    创建一个类(DoubleConverter),该类的作用是将一个字符串的值转换成浮点型(double)数值。

    #### 使用BigDecimal进行精确计算 为了提高精度并避免浮点数运算的误差问题,我们可以使用`BigDecimal`类来替代简单的浮点数运算。为此,我们创建了一个辅助类`ArithUtil`,用于实现基本的算术操作。 ```java ...

    Java中实现浮点数的精确计算

    ### Java中实现浮点数的精确计算 在Java编程中,使用`float`和`double`类型进行浮点数计算时经常会遇到精度丢失的问题。这是因为浮点数在计算机内部是以二进制形式存储的,而某些十进制小数无法用二进制精确表示,...

    java中BigDecimal的操作方法

    在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文将深入探讨BigDecimal的基本操作、应用场景及注意事项。 首先,创建...

    Java BigDecimal使用及基本运算(推荐)

    由于 double 和 float 类型在处理大数或需要绝对精确计算的场景下存在精度损失,因此 BigDecimal 成为了商业计算和金融计算的标准工具。 在使用 BigDecimal 时,我们需要通过构造函数来创建对象,通常我们会传入一...

    Java BigDecimal类用法详解

    Java中的`BigDecimal`类是用来表示任意精度的十进制数,尤其适合于需要精确计算的商业和财务场景。它的核心概念包括非标度值(unscaled value)和标度(scale),非标度值是一个任意精度的整数,标度则是小数点后的...

Global site tag (gtag.js) - Google Analytics