`
zwm
  • 浏览: 283641 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

BigDecimal数值精确运算

UP 
阅读更多
import java.math.BigDecimal;

public class TestBigDecimal {
	// 默认除法运算精度
	private static final int DEF_DIV_SCALE = 10;

	private TestBigDecimal() {
		//
	}

	private static TestBigDecimal instance = null;

	public static TestBigDecimal getInstance() {
		if (instance == null) {
			instance = new TestBigDecimal();
		}
		return instance;
	}

	/**
	 * 
	 * 提供精确的加法运算。
	 * 
	 * @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 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();

	}

	public static void main(String args[]) {
		double v1 = 1;
		double v2 = 0.1;
		double v3= 0.9;
		System.out.println(v1-v2);
		System.out.println(v1-v3);
		System.out.println(TestBigDecimal.getInstance().sub(v1, v3));
	}
}

 

分享到:
评论
1 楼 zwm 2008-12-21  
0.9
0.09999999999999998
0.1

相关推荐

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

    使用BigDecimal进行精确运算的步骤如下: 1. **创建BigDecimal对象**:你可以通过传入String表示的数值来创建BigDecimal对象,或者使用`BigDecimal.valueOf()`静态方法,将基本类型(如double)转换为BigDecimal。...

    Java中使用BigDecimal进行精确运算

    使用BigDecimal进行精确运算通常包括以下几个步骤: 1. **创建BigDecimal对象**:你可以通过`new BigDecimal(double)`构造函数或者`BigDecimal.valueOf(double)`静态方法将double类型的值转换为BigDecimal对象。...

    BigDecimal基本运算介绍

    `BigDecimal` 的运算方式与基本数据类型有所不同,因为它涉及到的对象操作而非简单的数值计算。 ### 1. 创建 `BigDecimal` 对象 `BigDecimal` 构造器通常接收一个字符串参数,该字符串表示要转换为 `BigDecimal` ...

    运用BigDecimal精确计算

    为了解决这个问题,Java提供了`BigDecimal`类,用于进行精确的十进制算术运算。这篇博客将深入探讨`BigDecimal`的使用,以及如何通过它来实现精确计算。 `BigDecimal`是Java `java.math`包下的一个类,它提供了任意...

    BigDecimal类

    BigDecimal 类是 Java 中的一种数值类型,主要用于处理超过 16 位有效数字的数值运算。该类提供了多种构造器和方法,用于创建和操作 BigDecimal 对象。 构造器 BigDecimal 类提供了四种构造器,用于创建不同的 ...

    BigDecimal使用

    3. 精确的加法运算:使用 BigDecimal 的 add 方法可以进行精确的加法运算,例如将两个 BigDecimal 对象相加并返回结果。 4. 精确的减法运算:使用 BigDecimal 的 subtract 方法可以进行精确的减法运算,例如将两个 ...

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

    BigDecimal 类在 Java 中是用于处理高精度和大数值计算的,它确保了在计算过程中不会因为浮点数的精度问题而导致结果错误。由于 double 和 float 类型在处理大数或需要绝对精确计算的场景下存在精度损失,因此 ...

    高精度JSBigDecimal运算

    `bigdecimal3.js`可能是一个实现了BigDecimal运算的JavaScript库,它可以提供比原生JavaScript更精确的十进制数运算。这个库可能包括了加法、减法、乘法、除法以及比较、取模等多种操作,确保在执行这些操作时不会...

    BigDecimal.js.zip

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

    javascript版BigDecimal类库

    - **性能考虑**:虽然`BigDecimal`提供了精确计算,但它的运算速度相比JavaScript原生的Number类型会慢得多。在性能敏感的场景下,需要权衡精度和速度。 - **版本兼容性**:在使用特定版本如`js_bigdecimal_1_0_1`...

    bigdecimal转integer.docx

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

    MyEditTextApplication输入框BigDecimal计算价格

    BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算,避免了传统浮点数运算中可能出现的精度损失问题。在金融或会计系统中,对数据的精度要求很高,BigDecimal就成为首选的数据类型。 在...

    Java中使用BigDecimal进行浮点数运算

    在Java编程语言中,浮点数运算经常遇到精度问题,特别是在金融或科学计算等领域,对数值的精确性有着严格的要求。这是因为Java中的`float`和`double`数据类型基于二进制浮点数表示,这导致它们无法精确表示某些十...

    bigdecimal

    本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### 一、基本概念 `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数...

    Java BigDecimal详解_动力节点Java学院整理

    他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,例如银行...

    BigDecimal向Double转换

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

    java BigDecimal操作

    在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...

    js_bigdecimal_1_0_1.zip

    为了解决这个问题,开发者引入了BigDecimal库,它提供了高精度的大数运算支持。"js_bigdecimal_1_0_1.zip"是一个包含了JavaScript环境下实现BigDecimal功能的库,版本号为1.0.1,据描述,这个库经过了实际测试,证明...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们基于二进制浮点运算,不能保证完全精确的结果。而`BigDecimal...

    java中BigDecimal的操作方法

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

Global site tag (gtag.js) - Google Analytics