`
Franciswmf
  • 浏览: 800381 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java.math.BigDecimal用法----Add、Subtract、Multiply、Divide

 
阅读更多
引用自:http://www.cnblogs.com/linjiqin/p/3413894.html
一、简介
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。


二、构造器描述
BigDecimal(int)       创建一个具有参数所指定整数值的对象。 
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。 
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。 
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。


三、方法描述

add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。 
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。 
multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。 
divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。 
toString()                将BigDecimal对象的数值转换成字符串。 
doubleValue()          将BigDecimal对象中的值以双精度数返回。 
floatValue()             将BigDecimal对象中的值以单精度数返回。 
longValue()             将BigDecimal对象中的值以长整数返回。 
intValue()               将BigDecimal对象中的值以整数返回。


四、格式化及例子
由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。

public static void main(String[] args) {
    NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用 
    NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用 
    percent.setMaximumFractionDigits(3); //百分比小数点最多3位 
    
    BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
    BigDecimal interestRate = new BigDecimal("0.008"); //利率   
    BigDecimal interest = loanAmount.multiply(interestRate); //相乘

    System.out.println("贷款金额:\t" + currency.format(loanAmount)); 
    System.out.println("利率:\t" + percent.format(interestRate)); 
    System.out.println("利息:\t" + currency.format(interest)); 
}

--Java 两个整数相除保留两位小数,将小数转化为百分数
http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html


--double加减乘除借助BigDecimal类
https://blog.csdn.net/gulingfengze/article/details/54094193

--20160722
--html页面js保留2位小数
function doFixedFun(a){
    var nNum = parseFloat(a);
	if(!isNaN(nNum)) {
	    //alert(nNum.toFixed(2));
	    return nNum.toFixed(2);
	}
}


public class BigDecimalDemo {
	/**
	 * 两个double类型的数相加
	 * @param a
	 * @param b
	 * @return
	 */
	private static double getAddResult(double a,double b){
		/*double要先转String,再转BigDecimal*/
		BigDecimal a2=new BigDecimal(Double.toString(a));
		BigDecimal b2=new BigDecimal(Double.toString(b));
		return a2.add(b2).doubleValue();
	}
	/**
	 * 两个double类型的数相减
	 * @param a
	 * @param b
	 * @return
	 */
	private static double getSubtractResult(double a,double b){
		/*double要先转String,再转BigDecimal*/
		BigDecimal a2=new BigDecimal(Double.toString(a));
		BigDecimal b2=new BigDecimal(Double.toString(b));
		return a2.subtract(b2).doubleValue();
	}
	/**
	 * 两个double类型的数相乘
	 * @param a
	 * @param b
	 * @return
	 */
	private static double getMultiplyResult(double a,double b){
		/*double要先转String,再转BigDecimal*/
		BigDecimal a2=new BigDecimal(Double.toString(a));
		BigDecimal b2=new BigDecimal(Double.toString(b));
		return a2.multiply(b2).doubleValue();
	}
	/**
	 * 两个double类型的数相除
	 * @param a
	 * @param b
	 * @return
	 */
	private static double getDivideResult(double a,double b){
		/*double要先转String,再转BigDecimal*/
		if(b<=0){
			throw new IllegalStateException("除数不能小于等于0");
		}
		BigDecimal a2=new BigDecimal(Double.toString(a));
		BigDecimal b2=new BigDecimal(Double.toString(b));
		return a2.divide(b2).doubleValue();
	}
	/**
	 * 数字格式化,"0.00"
	 * @param str
	 * @return
	 */
	private static String getValue(String str){
		short a=100;
		long number=1999L;
		//java.text.DecimalFormat
		DecimalFormat decimalFormat=new DecimalFormat("0.00");
		return decimalFormat.format(number);
	}
	
	public static void main(String[] args) {
		System.out.println("1、格式:"+BigDecimalDemo.getValue(""));
		System.out.println("2、double数相加:"+getAddResult(0.08, 0.98));
		double c=getAddResult(getAddResult(0.08, 0.98),1.66);
		System.out.println("c="+c);
		long y=1000066;
		long x=199993L;
		double a=0.1888;
		float b=1.992f;
		System.out.println("3、double数相减:"+getMultiplyResult(3.08, 0.98));
		System.out.println("4、double数相乘:"+getSubtractResult(0.08, 0.98));
		System.out.println("5、double数相除:"+getDivideResult(8.888, 0));
	}


五、Mysql与BigDecimal类
--MYSQL数据库 的 decimal 字段类型 和 Java 的BigDecimal
https://blog.csdn.net/diyu122222/article/details/76887382
--mysql的decimal
https://blog.csdn.net/weixin_42047611/article/details/81449663

六、Oracle与BigDecimal类
--oracle number对应java数据类型BigDecimal
https://www.cnblogs.com/vindanear/p/5410685.html
  • 大小: 24.9 KB
分享到:
评论

相关推荐

    JS的高精度计算(BigDecimal)

    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("3E+10"))); // / ...

    BigDecimal.js.zip

    var sum = bigNum1.add(bigNum2); ``` 或者,进行除法运算并指定精度: ```javascript var quotient = bigNum1.divide(bigNum2, 10, BigDecimal.ROUND_HALF_UP); ``` 此外,BigDecimal.js还支持其他数学运算,如...

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

    应该使用对应的`add()`、`subtract()`、`multiply()`、`divide()`方法。 - `divide()`方法如果没有指定精度和舍入模式,可能会抛出`ArithmeticException`异常,因为除不尽的数默认无法处理。 6. 性能考虑: `...

    javascript版BigDecimal类库

    2. **算术操作**:提供加法(`add`)、减法(`subtract`)、乘法(`multiply`)、除法(`divide`)等基本算术运算,这些操作能确保结果的精度不受JavaScript Number类型的限制。 3. **比较操作**:支持小于(`lt`)...

    java中math类的使用

    在Java编程语言中,`java.lang.Math`类提供了一系列用于执行基本数学运算的方法和常量。这个类包含静态方法和常量,使得开发者无需实例化对象即可直接调用其功能,极大地简化了数学计算的过程。 ### 常量 #### ...

    bigDecimal.js:支持大量操作JavaScript库

    const sum = bd1.add(bd2); console.log(sum.toString()); // 输出 "11111111111.1111111110" // 减法 const difference = bd1.subtract(bd2); console.log(difference.toString()); // 输出 "-8641975210....

    java中BigDecimal的操作方法

    2. **减法**:使用`subtract()`方法实现两个BigDecimal对象相减。 ```java public static BigDecimal subtract(String num1, String num2) { BigDecimal bd1 = new BigDecimal(num1); BigDecimal bd2 = new ...

    BigDecimal使用

    下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。 2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 ...

    浅谈java中BigDecimal类的简单用法

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

    Java中使用的常用数学类

    BigDecimal percentage = number1.multiply(new BigDecimal("100")).add(new BigDecimal(".00")); ``` 除了`BigDecimal`,`java.math`包还包含了其他有用的类,如`BigInteger`,它支持任意精度的整数运算,适用于...

    java-BigInteger-BigDecimal类源码

    它还支持`add()`, `subtract()`, `multiply()`, `divide()`, `divideToIntegralValue()`等方法。 4. **舍入模式**:在执行除法运算时,`BigDecimal`提供了多种舍入模式,如`ROUND_UP`, `ROUND_DOWN`, `ROUND_HALF_...

    JAVA格式输出,JAVA格式输出

    操作`BigInteger`和`BigDecimal`对象时,不能使用传统的运算符,而是要调用它们提供的方法,比如`add()`, `subtract()`, `multiply()`, 和 `divide()`。例如,执行`a * (b - 1) / c + 1`的计算,你需要写成: ```...

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

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

    Bigdecimal.js

    `BigDecimal`类库提供了丰富的操作方法,包括加法(add)、减法(subtract)、乘法(multiply)、除法(divide)、求余(remainder)、比较(compare)等,这些方法都是为了确保在进行高精度运算时的准确无误。...

    运用BigDecimal精确计算

    `BigDecimal`提供了丰富的运算方法,如`add()`(加法)、`subtract()`(减法)、`multiply()`(乘法)、`divide()`(除法)等。每个运算方法都有多个重载版本,用于指定运算的精度和舍入模式。例如,`divide...

    javaInteger大数据运算.pdf

    2. `BigDecimal` 类:同样在`java.math`包下,`BigDecimal`用于表示任意精度的十进制数。与`BigInteger`不同,它处理浮点数,适合处理财务或精确计算场景。`BigDecimal`避免了浮点数运算中的精度损失问题,因为它...

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

    8. **运算效率**:连续多次使用`add()`、`subtract()`等方法可能会导致大量中间对象的生成,可以考虑使用`BigDecimal`的`stripTrailingZeros()`方法减少对象数量。 综上,`BigDecimal`是Java中处理精确数值计算的...

    Java编程BigDecimal用法实例分享

    也可以使用add()、subtract()、multiply()和divide()方法来进行数学运算。 在本文中,我们提供了一个测试代码,展示了如何创建BigDecimal对象、如何使用不同的构造方法、如何进行数学运算等。代码如下: ```java ...

    Java中BigDecimal类的使用详解

    Java中BigDecimal类的使用详解 Java中BigDecimal类是Java.math包中提供的一个API类,用于对超过16位有效位的数进行精确的运算。由于浮点数的精度问题,Java中浮点数的计算会失去一定的精确度。因此,使用BigDecimal...

    Java Bigdecimal使用原理详解

    BigDecimal提供了add(), subtract(), multiply(), divide()等方法来实现加减乘除运算。例如: BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = ...

Global site tag (gtag.js) - Google Analytics