`

java.math.BigDecimal的精度问题

    博客分类:
  • Java
阅读更多

1.

 String myMoney = "100.0128";

  BigDecimal money= new BigDecimal(myMoney);

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

  System.out.println(money);

  //100.01

2. 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();

 }
 
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2010/0414/22011.php

分享到:
评论

相关推荐

    java.math.BigDecimal 操作类

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

    关于java中BigDecimal的简介(csdn)————程序.pdf

    Java中的`BigDecimal`类是用于表示和操作高精度浮点数的重要工具,尤其适用于需要进行精确计算的场景,如财务和货币计算。由于基本数据类型`double`和`float`在进行大数值或高精度计算时可能会导致精度丢失,因此`...

    java实现大数加法(BigDecimal)的实例代码

    与Java中的`int`, `long`, `float`, `double`等基本类型不同,`BigDecimal`不依赖于机器的浮点数表示,因此可以进行精确的算术运算,避免了浮点数运算常见的精度损失问题。 在给定的实例代码中,我们首先创建两个`...

    BigDecimal 加减乘除运算

    Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...

    js_bigdecimal_1_0_1.zip

    在Java中,有内置的`java.math.BigDecimal`类,但JavaScript原生并不支持这样的数据类型。因此,"js_bigdecimal_1_0_1"库可能是将Java的BigDecimal概念移植到了JavaScript中,以便在Web开发中进行高精度计算。 这个...

    java.math包下计算浮点数和整数的类的实例

    Java.math 包下计算浮点数和整数...Java.math 包下计算浮点数和整数的类的实例非常重要, BigInteger 和 BigDecimal 两个类是 Java.math 包中的核心类,它们提供了高精度的整数和浮点数运算,用于解决复杂的数学问题。

    java中math类的使用

    通过以上介绍,我们可以看到`java.lang.Math`类以及`java.math.BigInteger`和`java.math.BigDecimal`类在处理各种数学计算和大数运算时的强大功能和灵活性。这些工具不仅简化了开发者的代码编写过程,还提高了程序的...

    API规范JAVA.pdf

    * java.math 是 Java 2 Platform 的一部分,提供了用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 21、网络应用程序:java.net 为实现网络应用程序提供类。 * java.net 是 Java 2...

    高精度JSBigDecimal运算

    `BigDecimal`类在Java等其他语言中是专门用来处理高精度十进制数的,它提供了丰富的算术运算方法,确保计算结果的精确性。在JavaScript中,虽然没有内置的`BigDecimal`类,但开发者可以通过第三方库来实现类似的功能...

    BigDecimalUtils

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做...

    java中数学操作类的简介共5页.pdf.zip

    除了这些基本的数学操作,Java还提供了其他类来处理复数(`java.math.Complex`),大数(`java.math.BigInteger`和`java.math.BigDecimal`)以及高精度浮点数(`java.math.BigDecimal`)。这些类在需要更高精度或更...

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

    import java.math.BigDecimal; import java.text.DecimalFormat; public class Calculation { public static final DecimalFormat df = new DecimalFormat("######0.00"); /** * @methodName format2point * @...

    Java Math.round(),Math.ceil(),Math.floor()的区别详解

    在Java编程语言中,`Math`类提供了几个用于处理数值的静态方法,其中包括`Math.round()`, `Math.ceil()`, 和 `Math.floor...在处理浮点数时,尤其要注意精度问题,必要时可以使用 `BigDecimal` 类来保证计算的精确性。

    java-BigInteger-BigDecimal类源码

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

    Java Double 精度问题总结

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

    JAVA_API1.6文档(中文)

    java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....

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

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

    浅谈java中BigDecimal类的简单用法

    在Java编程语言中,`BigDecimal` 类位于 `java.math` 包中,是用于执行高精度和任意精度的十进制算术运算的关键类。它主要用于处理需要精确数值计算的场景,例如金融或会计领域,因为传统的 `float` 和 `double` ...

    Java中使用的常用数学类

    为了应对浮点数运算可能出现的精度问题,Java提供了`java.math`包,其中包含了一些用于精确数学计算的类,比如`BigDecimal`。本文将深入探讨Java中常用的数学类以及如何进行精确的浮点数运算,包括加减乘除、四舍五...

    BigDecimal使用

    1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。 2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 String 类型的数值转换为 BigDecimal 对象。 3. 精确...

Global site tag (gtag.js) - Google Analytics