`
wenjianping007
  • 浏览: 13615 次
  • 性别: 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精度和相等比较的坑

    BigDecimal是一种精确的数字类,一般用于高精度的开发领域中,例如银行。下面这篇文章主要给大家介绍了关于Java中BigDecimal精度和相等比较的坑的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

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

    下面小编就为大家带来一篇java中double转化为BigDecimal精度缺失的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    BigDecimal工具类.docx

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

    javascript版BigDecimal类库

    javascript的数值精确计算类bigdecimal,改编自java的bigdecimal

    bigdecimal

    java丢失精度,bigdecimal加减乘除

    高精度JSBigDecimal运算

    高精度JSBigDecimal运算,解决JS中BigDecimal运算和精度问题。

    BigDecimal 加减乘除运算

    双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是...

    bignumber.min.js下载

    众所周知,数字运算的精度问题是一个让人很旦疼的问题,而java中有BigDecimal类对数字精度问题进行处理,经过一番查询,发现前段有一个宝藏精度处理类bignumber。亲测好用。 众所周知,数字运算的精度问题是一个让人...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    其中,BigDecimal 是一种高精度的十进制浮点数类型,适合处理大数值计算。在一些需求中,我们可能需要将 BigDecimal 值转换为 Integer 类型。这时,可以使用 BigDecimal 的 intValue() 方法进行转换。 当 ...

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

    DecimalFormat精度解决,商业运算精度问题,BigDecimal类的应用--------------

    big-math:使用任意精度的高级Java BigDecimal数学函数(pow,sqrt,log,sin等)

    使用任意精度的高级Java BigDecimal数学函数( pow , sqrt , log , sin ,...)。 另请参阅官方的。大十进制数学BigDecimalMath类为以下各项提供了有效且准确的实现: log(BigDecimal, MathContext) exp...

    javabiginteger源码-bigdecimal.js:任意精度JavascriptBigInteger和BigDecimal实数

    如果这对您来说是个问题: node&gt; 0.1 + 0.2 0.30000000000000004 那么你需要 Javascript 的 BigDecimal。 BigDecimal 非常适合金融信息的算术,或任何超过 Javascript Number (IEEE-754 float) 类型的东西。 Decimal...

    BigDecimal-CPP-master.zip

    关于浮点数在计算机中的存储方式与精度丢失问题(float,double):https://blog.csdn.net/alzzw/article/details/108132830 可以用此类解决

    Java 加减乘除工具类(解决精度损失问题)

    //精度为2,舍入模式为大于0.5进1,否则舍弃 BigDecimal b1 = new BigDecimal(Double.toString(value1.doubleValue())); BigDecimal b2 = new BigDecimal(Double.toString(value2.doubleValue())); return b1....

    bigdecimal.js

    在前端实际开发中,进行前端计算会出现丢失精度的问题,项目中需要对金钱进行运算,为了使计算结果更准确,故使用bigDecimal工具来实现

    java.math.BigDecimal 操作类

    java.math.BigDecimal 操作类,包含加减乘除、String型加减乘除精度格式化转换计算等

    关于java的数值精度

    java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题

    bigdecimal-任意精度十进制数-Rust开发

    bigdecimal-rs文档为锈实现的任意精度十进制数字。 关于此存储库包含最初用于bigdebigdecimal-rs文档的代码。文档为rust实现了任意精度的十进制数。 关于此存储库包含本来用于流行的num crate中的bigdecimal模块的...

    Bigdecimal.js

    是不是还在为多精度小数运算烦恼 这个满足你一切要求 项目中需要对金钱进行运算,为了使计算结果更准确,故使用bigDecimal工具来实现

Global site tag (gtag.js) - Google Analytics