`
wenjianping007
  • 浏览: 13954 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

BigDecimal的精度问题

    博客分类:
  • java
阅读更多

String myMoney = "100.0128";

BigDecimal money= new BigDecimal(myMoney);

//设置精度,以及舍入规则
money= money.setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println(money);

//100.01
 
double myMoney = 100.0128;

     myMoney    = Math.round(myMoney    * 100) / (double) 100    ;

     BigDecimal money= new BigDecimal(myMoney);

      System.out.println(money); //后面则有很多的小数

      //为了保证小数位数为2位

       BigDecimal money= new BigDecimal(Double.toString(myMoney));

       System.out.println(money); //小数位数则为2位

 

 

这个类确实好用。在网上找到大的,是一个女Java程序员写的。厉害~~~~~~哈哈
/*
* 创建日期 2004-10-14
*
* 如果需要精确计算,非要用String来够造BigDecimal不可
*/
package com.lims.actions.testqc.comm;

/**
* @author Jstar
*
*
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
import java.math.BigDecimal;

/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/

public class Arith {

   //默认除法运算精度
   private static final int DEF_DIV_SCALE = 10;
   //这个类不能实例化

   private Arith() {}

   /**
    * 提供精确的加法运算。
    * @param v1 被加数
    * @param v2 加数
    * @return 两个参数的和
    */

   public static double add(double v1, double v2) {

      BigDecimal b1 = new BigDecimal(Double.toString(v1));
      BigDecimal b2 = new BigDecimal(Double.toString(v2));
      return b1.add(b2).doubleValue();
   }

   /**
      * 提供精确的减法运算。
      * @param v1 被减数
      * @param v2 减数
      * @return 两个参数的差
      */

   public static double sub(double v1, double v2) {

      BigDecimal b1 = new BigDecimal(Double.toString(v1));
      BigDecimal b2 = new BigDecimal(Double.toString(v2));
      return b1.subtract(b2).doubleValue();
   }

   /**
      * 提供精确的乘法运算。
      * @param v1 被乘数
      * @param v2 乘数
      * @return 两个参数的积
      */

   public static double mul(double v1, double v2) {

      BigDecimal b1 = new BigDecimal(Double.toString(v1));
      BigDecimal b2 = new BigDecimal(Double.toString(v2));
      return b1.multiply(b2).doubleValue();
   }

   /**
      * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
      * 小数点以后10位,以后的数字四舍五入。
      * @param v1 被除数
      * @param v2 除数
      * @return 两个参数的商
      */

   public static double div(double v1, double v2) {
      return div(v1, v2, DEF_DIV_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 b = new BigDecimal(Double.toString(v));
      BigDecimal one = new BigDecimal("1");
      return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();


}
 
分享到:
评论

相关推荐

    JS的高精度计算(BigDecimal)

    你是否因为JS端的小数计算的精度不足而发愁过呢 其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 &lt;!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+...

    Java中BigDecimal精度和相等比较的坑

    3. 使用 `BigDecimal.valueOf(0.0)` 创建,同样由于浮点数精度问题,`equals()` 返回 `false`。 4. 使用 `BigDecimal.valueOf(0.0).setScale(1)` 创建并设置精度为1,即使数值相同,但由于设置了不同的标度,`equals...

    javascript版BigDecimal类库

    总的来说,JavaScript版`BigDecimal`类库为开发者提供了一种解决JavaScript精度问题的工具,使得在进行金融计算、科学计算或其他需要高精度计算的场合下,能够得到准确的结果。通过学习和应用这个库,开发者可以更好...

    BigDecimal.js.zip

    总之,BigDecimal.js是一个强大的JavaScript库,专门用于处理大数的高精度计算,通过引入"BigDecimal-all-last.min.js",开发者可以获得精确的大数运算能力,从而避免JavaScript原生数据类型的精度问题。在开发过程...

    bigdecimal

    `BigDecimal` 的出现就是为了解决这类问题。 #### 三、BigDecimal的基本操作 以下是一些常见的 `BigDecimal` 操作: 1. **加法**: 使用 `add()` 方法。 2. **减法**: 使用 `subtract()` 方法。 3. **乘法**: 使用...

    BigDecimal-CPP-master.zip

    标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意...通过学习和使用`BigDecimal`类,开发者可以避免浮点数精度问题,从而获得更准确的计算结果。

    BigDecimal向Double转换

    在Java编程语言中,BigDecimal是一种用于处理高精度数值的数据类型,尤其适用于金融计算等领域,因为它可以提供不受限的小数位数精度以及精确的数学运算能力。然而,在某些情况下,我们可能需要将BigDecimal类型的值...

    java中double转化为BigDecimal精度缺失的实例

    为了避免这种精度问题,可以采用以下策略: - **避免直接用`double`或`float`进行计算**:在需要精确计算的场景下,最好一开始就使用`BigDecimal`,避免在`double`或`float`中进行任何操作。 - **使用`BigDecimal`...

    BigDecimal类

    * `BigDecimal(double)`: 创建一个具有参数所指定双精度值的对象。 * `BigDecimal(long)`: 创建一个具有参数所指定长整数值的对象。 * `BigDecimal(String)`: 创建一个具有参数所指定以字符串表示的数值的对象。 ...

    Java Double 精度问题总结

    ### Java Double 精度问题总结 在Java编程语言中,`double` 类型是一种用于表示64位浮点数的原始数据类型。虽然 `double` 提供了相对较高的精度,但在涉及精确数学运算(特别是涉及到小数值)时,由于其内部采用二...

    bigdecimal转integer.docx

    `BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,它只能存储整数值。在某些情况下,我们可能需要将 `BigDecimal` 对象转换...

    BigDecimal的计算

    通过使用 `BigDecimal`,可以避免由于二进制浮点数的有限精度带来的舍入误差问题。 ##### 2. 构造方法与静态工厂方法 `BigDecimal` 提供了多种构造方法以及一些静态工厂方法用于创建实例。例如: - `new BigDecimal...

    js_bigdecimal_1_0_1.zip

    需要注意的是,由于JavaScript的动态类型特性,使用BigDecimal库时需要特别注意类型转换,避免因隐式转换导致的精度问题。同时,大数计算可能会比常规的JavaScript数值计算更消耗性能,因此在不需要高精度的情况下,...

    BigDecimal加减乘除计算

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

    BigDecimal工具类.docx

    在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法,这些方法可以根据不同的参数类型和精度需求进行选择。 首先,让我们来看一下add方法。add方法有三种重载形式,分别是add(double,double)...

    java BigDecimal操作

    总的来说,理解和熟练运用BigDecimal是每个Java开发者必备的技能之一,特别是在处理货币计算、财务计算等场景时,能够避免因为浮点数精度问题导致的错误。在使用BigDecimal时,一定要注意其性能开销,因为它比基本的...

    BigDecimal使用

    BigDecimal 是 Java 中一个用于处理金融和商业应用的类,其主要功能是提供高精度的数字计算。下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。...

    java中BigDecimal的操作方法

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

    DecimalFormat精度解决,商业运算精度问题

    - `BigDecimal(double val)`:通过一个`double`值创建`BigDecimal`对象,但这种方式可能会引入精度问题。 - `BigDecimal(String val)`:推荐使用字符串的方式创建`BigDecimal`对象,以确保精度不丢失。 ```java ...

    java-BigInteger-BigDecimal类源码

    在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,它们分别用于处理大整数和高精度浮点数。这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入...

Global site tag (gtag.js) - Google Analytics