今天看API 发现BigDecimal一个问题 记录一下
public BigDecimal(double val) 构造方法
中说明
Note: the results of this constructor can be somewhat unpredictable
下面代码大家看下就明白了
System.out.println(new BigDecimal(0.1));
System.out.println(new BigDecimal(Double.toString(0.1)));
float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal
下面是在网上找的一个工具类 地址http://blog.csdn.net/victoryckl/article/details/7782326
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 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 使用 BigDecimal 是 Java 中一个用于处理金融和商业应用的类,其主要功能是提供高精度的数字计算。下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java....
`com`这个文件夹名可能表示该压缩包中包含的是一个Java项目的源代码目录,其中可能包含了使用`BigInteger`和`BigDecimal`的例子或库。在实际学习和使用时,可以查看这些源代码来理解这两个类的具体用法和应用场景。...
为了解决这个问题,开发者们引入了`BigDecimal`类库的概念,它在Java中被广泛使用,用于进行高精度的算术运算。本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 ...
* 由于一般数值类型,例如 double,不能准确地代表 16 位有效数以上的数字,在使用 BigDecimal 时,应用 BigDecimal(String) 构造器创建对象才有意义。 * 不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学...
使用BigDecimal.js库时,首先需要在HTML文件中引入"BigDecimal-all-last.min.js"。这可以通过在`<head>`或`<body>`标签中添加`<script>`标签来完成: ```html <script src="path/to/BigDecimal-all-last.min.js"> `...
本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### 一、基本概念 `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数...
BigDecimal工具类 BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,...
如果 `BigDecimal` 包含小数,但你想保留小数位并将小数部分转化为整数,可以先使用 `setScale()` 方法调整小数位,然后再调用 `intValue()`。例如: ```java BigDecimal bigDecimal = new BigDecimal(1.25); ...
本文将基于提供的代码片段来详细解释如何使用 `BigDecimal` 进行计算,并深入探讨其应用场景。 #### 关键知识点 ##### 1. BigDecimal 类的概述 `BigDecimal` 是 Java 中的一个类,它能够提供对任意精度的十进制数...
- **避免浮点数运算误差**:在处理涉及小数点的运算时,使用BigDecimal可以避免由浮点数运算带来的误差问题。 ## 二、BigDecimal到Double的转换 ### 2.1 使用doubleValue()方法 最简单的方式是通过BigDecimal类...
在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们基于二进制浮点运算,不能保证完全精确的结果。而`BigDecimal...
使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10"))); //* alert(new BigDecimal("10").multiply(new ...
在进行大量计算时,为了性能考虑,可以使用`BigDecimal.valueOf()`静态工厂方法,它会复用已存在的BigDecimal实例,避免重复创建对象。 `MathContext`是另一个重要的概念,它定义了计算的精度和舍入模式。例如,`...
为了优化性能,可以使用 `BigDecimal.setMathContext()` 设置数学上下文,或者使用 `BigDecimal.stripTrailingZeros()` 去除尾部的零。 总之,BigDecimal 是 Java 中用于高精度计算的关键工具,通过其提供的方法和...
Java Bigdecimal使用原理详解 Java Bigdecimal是Java语言中用于精确计算的类,它可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.math类包下,提供了多种构造函数和方法来实现精确计算。 ...
在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文将深入探讨BigDecimal的基本操作、应用场景及注意事项。 首先,创建...
本项目“MyEditTextApplication”专注于使用BigDecimal进行输入框内的价格计算,确保计算结果的高度精确,尤其是在处理小数点后的多位数字时。 BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算...
标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意...通过学习和使用`BigDecimal`类,开发者可以避免浮点数精度问题,从而获得更准确的计算结果。
需要注意的是,由于JavaScript的动态类型特性,使用BigDecimal库时需要特别注意类型转换,避免因隐式转换导致的精度问题。同时,大数计算可能会比常规的JavaScript数值计算更消耗性能,因此在不需要高精度的情况下,...
BigDecimal 使用方法小节:包含构造方法及和、差、商、积等运算方式