http://hi.baidu.com/suofang/blog/item/0da152df93df8e144954031a.html
import java.math.BigDecimal;
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));//必须转换成String
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提供的精确计算
public static void main(String[] args) {
//直接使用浮点数进行计算,得到的结果是有问题的
System.out.println(0.01+0.05);
//使用了BigDecimal类进行计算后,可以做到精确计算
System.out.println(Arith.add(0.05, 0.01));
System.out.println(1.0-0.42);
System.out.println(Arith.sub(1.0, 0.42));
System.out.println(4.015*100);
System.out.println(Arith.mul(4.015, 100));
System.out.println(123.3/100);
System.out.println(Arith.div(123.3, 100, 2));
/* 0.060000000000000005
0.06
0.5800000000000001
0.58
401.49999999999994
401.5
1.2329999999999999
1.233*/
}
}
相关推荐
java高精度计算通常是指使用BigDecimal类来实现高精度计算,通过设置保留的小数位数来控制计算结果的精度。 java高精度计算的重要性 1. 金融应用:在金融应用中,高精度计算是非常重要的,因为小数点后面的一分钱...
在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,它们分别用于处理大整数和高精度浮点数。这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入...
总之,Java中的BigDecimal类是处理精确数值计算的重要工具,尤其是在金融、会计等对精度要求极高的领域。通过使用其提供的各种构造方法和运算方法,开发者可以有效地控制计算过程中的精度,确保计算结果的正确性。...
在Java编程语言中,BigDecimal是...总之,BigDecimal是Java中处理高精度计算的关键工具,尤其在金融、会计等对精度要求严格的领域。正确理解和使用BigDecimal的方法和策略,能确保程序在进行复杂计算时得出准确的结果。
总之,BigDecimal 是 Java 中用于高精度计算的关键工具,通过其提供的方法和舍入模式,可以确保在财务等对精度有严格要求的场景下进行准确的计算。在实际编程中,应优先使用字符串构造 BigDecimal 对象,并合理设置...
在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...
BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法...
为了克服这个问题,Java提供了`java.math.BigDecimal`类,它提供了一种方法来进行高精度的十进制计算,从而避免浮点运算中的精度问题。 描述中的"Java实现的浮点类的精确计算"很可能就是指一个自定义的工具类,该类...
Java中BigDecimal类的使用详解 Java中BigDecimal类是Java.math包中提供的一个API类,用于对超过16位有效位的数进行精确的运算。由于浮点数的精度问题,Java中浮点数的计算...这对于需要高精度计算的应用程序非常重要。
Java中的`BigDecimal`类是用于表示和操作高精度...总结,`BigDecimal`在Java中扮演了高精度计算的重要角色,尤其是在金融、会计等领域。通过使用其提供的方法,开发者可以确保在进行数值计算时获得准确无误的结果。
在JavaScript(JS)中,由于其内置的数据类型限制,进行大数或高精度计算时,可能会遇到精度丢失的问题。这主要是因为JavaScript默认使用了浮点数(Number)类型,其精度只能保证到小数点后15位。这对于需要进行财务...
Java中的BigDecimal是一种高精度的数据类型,它可以用来表示非常大的整数和小数,提供了丰富的数学运算功能。下面我们将对Java中BigDecimal的基本运算进行详细的介绍。 构造方法 BigDecimal有四种构造方法,但是...
在Java编程语言中,`BigDecimal`...了解`BigDecimal`的工作原理及其方法,对于编写精确、可靠的金融和其他需要高精度计算的Java应用程序至关重要。通过合理的使用和定制,我们可以确保在处理大数时获得预期的准确结果。
在Android应用开发中,我们经常需要处理用户在输入框(EditText)中输入的数据,特别是涉及到货币计算时,精确的数值处理变得尤为重要。...开发者可以参考该项目来学习如何在实际项目中实现类似的高精度计算需求。
高精度计算:当需要进行高精度的数学计算时,如金融应用、科学计算等。 舍入规则控制:当需要精确控制数字舍入规则时,如货币计算、统计分析等。 随机数生成:当需要生成伪随机数以支持随机性需求时,如游戏开发、...
通过以上分析,我们可以看到 `BigDecimal` 在处理金融或科学计算中的重要性,尤其是在需要高精度计算的场景下。合理使用 `BigDecimal` 及其提供的各种方法,可以帮助我们避免因浮点数精度限制而产生的误差问题。此外...
本文主要介绍了 Java 中的高精度整数和高精度小数,以及如何使用 BigInteger 和 BigDecimal 类来处理高精度整数和高精度小数。在实际应用中,这些知识点非常重要,可以帮助我们更好地处理大整数和小数,避免计算误差...
这个类提供了精确的浮点数运算,特别适合于需要高精度计算的情况,如金融计算或者复杂的数学运算。下面将详细讨论`BigDecimal`类以及如何使用它来实现大数加法。 `BigDecimal`类是Java标准库`java.math`包中的一个...
Java 使用 BigDecimal 进行高精度计算的示例代码 在 Java 中,浮点类型的数值计算存在舍入误差的问题,因为浮点数不是精确值。因此,在进行高精度计算时,需要使用 BigDecimal 类来避免舍入误差。 首先,为什么...
总之,理解和正确使用 `BigDecimal` 的精度和比较是避免在高精度计算中出错的关键。在实际项目中,尤其是在金融系统中,对数字的精确处理至关重要,因此开发者必须谨慎处理 `BigDecimal` 的实例化和比较操作。