Java Bigdecimal.

时间:2020-02-23 14:34:57  来源:igfitidea点击:

在本教程中,我们将看到Java BigDecimal类。

BigDecimal类包含算术运算,舍入,比较,缩放。
它提供了高精度的算术运算,因此通常用于处理银行和金融领域的数字。

Java BigDecimal提供了许多控制舍入的选项。
我们可以选择各种舍入模式,如圆形半向上或者圆形以进行舍入。

以下是创建BigDecimal的简单方法。
我们将使用基于字符串的构造函数来创建BigDecimal对象。

BigDecimal bigDecimal=new BigDecimal("12.23");
        System.out.println(bigDecimal)

一个示例,用于为BigDecimal设置尺度高达2个小数点:

BigDecimal b = new BigDecimal("10.12545");
		b=b.setScale(2, BigDecimal.ROUND_HALF_UP);
		System.out.println("BigDecimal Rounding to 2 decimal places: "+b);

正如BigDecimal就像String一样,它始终返回新对象时执行任何操作。
这就是为什么我们需要将B.setscale(2,bigdecimal.round_half_up)再次分配给b引用变量。

构造师

构造函数
BigDecimal(Biginteger Val)<br>将一个BigInteger转换为一个大型。
BigDecimal(Biginteger UnscaledVal,int刻度)<br>将BigInteger Unscaled值和int刻度转换为大型。
BigDecimal(Biginteger UnscaledVal,int刻度,MathContext MC)<br>将BigInteger Unscaled Value和INT缩放转换为BigDecimal,根据上下文设置舍入。
BigDecimal(BigInteger Val,MathContext MC)<br>根据上下文设置将BigInteger转换为BigDecimal舍入。
BigDecimal(Char [] IN)<br>将BigDecimal的字符数组表示转换为BigDecimal,接受与BigDecimal(String)构造函数相同的字符序列。
BigDecimal(Char [] In,Int Offset,Int Len)<br>将大量的字符数组表示到BigDecimal,接受与BigDecimal(String)构造函数相同的字符序列,同时允许子要指定的数组。
BigDecimal(Char [] In,Int Offset,Int Len,MathContext MC)<br>将BigDecimal的字符数组表示转换为BigDecimal,接受与BigDecimal(String)构造函数相同的字符序列,同时允许要指定的子阵列,并根据上下文设置进行舍入。
BigDecimal(Char [] In,MathContext MC)<br>将BigDecimal的字符数组表示转换为BigDecimal,接受与BigDecimal(String)构造函数相同的字符序列,并根据上下文设置进行舍入。
BigDecimal(Double Val)<br>将双重转换为BigDecimal,这是双二进制浮点值的确切十进制表示。
BigDecimal(Double Val,MathContext MC)<br>将Double转换为BigDecimal,按照上下文设置进行舍入。
BigDecimal(int val)<br>将一个INT转换为大量。
BigDecimal(Int Val,MathContext MC)<br>将INT转换为BigDecimal,根据上下文设置进行舍入。
BigDecimal(Long Val)<br>将长期转换为大量。
BigDecimal(Long Val,MathContext MC)<br>将长度转换为大量,根据上下文设置,舍入。
BigDecimal(String val)<br>将BigDecimal的字符串表示转换为BigDecimal。
BigDecimal(String Val,MathContext MC)<br>将BigDecimal的字符串表示转换为BigDecimal,接受与BigDecimal(String)构造函数相同的字符串,根据上下文设置,舍入。

方法

|返回类型|方法|
| --- - | --- |
| Bigdecimal | ABS()<br>此方法返回BigDecimal的Absumve值。它将保留大型的比例|
| Bigdecimal | ABS(MathContext MC)<br>此方法返回此BigDecimal的绝对值,根据MathContext设置舍入。 |
| Bigdecimal |添加(BigDecimal Engend)<br>此方法返回一个BigDecimal,其值为(此和增强)的总和,其比例为max(this.scale(),enavend.scale())。 |
| Bigdecimal |添加(BigDecimal Engend,MathContext MC)<br>它返回一个BigDecimal,其值为(此和增强)的总和,根据MathContext设置进行舍入。 |
|字节| bytevalueexact()<br>它将这个bigdecimal转换为字节,检查丢失的信息。 |
| int | Compareto(BigDecimal Val)<br>此方法用于将其与另一个BigDecimal进行比较。此方法基于输入返回0,1或者-1|
| Bigdecimal |划分(BigDecimal Divisor)<br>此方法返回一个BigDecimal,其值为(此/除法),其首选比例(this.scale() - divisor.scale());如果无法表示确切的商(因为它具有非终止十进制扩展),则抛出arithmeticexception。 |
| Bigdecimal |除以(BigDecimal Divisor,int RoundingMode)<br>此方法返回一个大数字,其值为(此/除数),其比例为此.Scale(),它基于参数应用舍入模式。 |
| Bigdecimal |除以(BigDecimal Divisor,Int Scale,INT roundingMode)<br>此方法返回一个BigDecimal,其值为(此/除数),其比例如指定,并且它根据参数应用舍入模式。 |
| Bigdecimal |划分(BigDecimal Divisor,Int Scale,RoundingMode RoundingMode)<br>此方法返回一个大量的值,其值为(此/除法),其比例如指定。 |
| Bigdecimal |划分(BigDecal Divisor,MathContext MC)<br>此方法返回一个重要的值,其值为(此/除数),根据MathContext设置进行舍入。 |
| Bigdecimal |除以(BigDecimal Divisor,RoundingMode roundingMode)<br>此方法返回一个BigDecimal,其值为(此/除数),其比例为this.scale()。 |
| bigdecimal [] | DivideAndremainder(BigDecimal Divisor)<br>此方法返回一个两个元素的BigDecimal数组,其中包含DivifiteGoItAlValue的结果,然后是两个操作数在剩余状态的结果。 |
| bigdecimal [] | DivideAndremainder(BigDecimal Divisor,MathContext MC)<br>此方法返回一个两个元素的BigDecimal数组,其中包含DivifitoIteGraalValue的结果,然后根据MathContext设置计算的两个操作数上的剩余部分。 |
| Bigdecimal | DividetointeGraalvalue(BigDecimal Divisor)<br>此方法返回一个BigDecimal,其值是舍入的Incerience(此/除数)的整数部分。 |
| Bigdecimal | DivideTointeGraalue(BigDecimal Divisor,MathContext MC)<br>此方法返回一个BigDecimal,其值是(本/除数)的整数部分,根据MathContext设置,舍入|
|双人间| DoubleValue()<br>此方法将此BigDecimal转换为双重值。 |
|布尔|等于(对象X)<br>此方法将此BigDecimal与指定的相等对象进行比较。请注意,此方法在应用平等时考虑到缩放。 |
|浮子| floatvalue()<br>此方法将此BigDecimal转换为浮点值。 |
| int | hashcode()<br>此方法返回此BigDecimal的哈希代码。 |
| int | IntValue()<br>此方法简单地将此BigDecimal转换为INT值。 |
| int | Intvalueexact()<br>此方法将此BigDecimal转换为INT,检查丢失的信息。 |
|长| longValue()<br>此方法将此BigDecimal转换为长值。 |
|长| l ongvalueexact()<br>此方法将此BigDecimal转换为长时间的,检查丢失的信息。 |
| Bigdecimal | Max(BigDecimal Val)<br>此方法返回此BigDecimal和Val的最大值。 |
| Bigdecimal | min(bigdecimal val)<br>此方法返回此BigDecimal和Val的最低限度。 |
| Bigdecimal | MovePointLeft(int n)<br>此方法返回一个BigDecimal,其等同于此具有小数点的此值为左侧的N个位置。 |
| Bigdecimal | movepointright(int n)<br>此方法返回一个BigDecimal,其等同于此值,其中小数点移动到右侧的N个位置。 |
| Bigdecimal |乘以(大型多重型)<br>此方法返回一个大量的值,其值为(此×multiplicand),其比例为(this.scale()+ multiplicand.scale())。 |
| Bigdecimal |乘以(BigDecimal Multiplicand,MathContext MC)<br>此方法返回一个BigDecimal,其值为(此×multiplicand),根据MathContext设置进行舍入。 |
| Bigdecimal | negate()<br>此方法返回一个大型数量,其值为( - 该),且何种比例为此.Scale()。 |
| Bigdecimal |否定(MathContext MC)<br>此方法返回一个大量的值,其值为( - 该),根据Mathcontext设置,舍入。 |
| Bigdecimal | Plus()<br>此方法返回一个BigDecimal,其值为(+此),且何种比例为此.Scale()。它与否定()相反。 |
| Bigdecimal |加(MathContext MC)<br>此方法返回一个大型数量,其值为(+ this),根据MathContext设置,舍入为舍入。 |
| Bigdecimal | POW(int n)<br>此方法返回一个重要的值,其值是(此^ n),电源完全计算,以无限制精度。 |
| Bigdecimal | POW(int n,mathcontext mc)<br>此方法返回一个BigDecimal,其值为(此^ n),根据MathContext设置舍入。 |
| int | precision()<br>此方法只是返回此BigDecimal的精度。 |
| Bigdecimal |余数(大型除数)<br>此方法返回一个大型值,其值为(此%除数)。 |
| Bigdecimal |余数(大型除数,MathContext MC)<br>此方法返回一个重要的值,其值为(此%除数),根据MathContext设置舍入。 |
| Bigdecimal |圆形(MathContext MC)<br>此方法根据MathContext设置返回大量圆形。 |
| int | scale()<br>此方法返回此BigDecimal的比例。 |
| Bigdecimal | ScalebypowerOnten(int n)<br>此方法返回一个大二指时,其数值等于(此* 10n)。 |
| Bigdecimal | SetScale(int newscale)<br>此方法返回一个BigDecimal,其比例为指定值,其值在数值上等于此BigDecimal。此用于设置BigDecimal的规模|
| Bigdecimal | setScale(int newscale,int roundingmode)<br>此方法返回一个大型刻度为指定值,并且其未划分的值通过将此Bigdecal的未划分值乘以为维护其整体而乘以或者划分其未划分的值来确定。价值。 |
| Bigdecimal | SetScale(int newscale,roundingmode roundingmode)<br>此方法返回一个大型刻度为指定值,并且其未划分的值通过将此BigDecimal的未加工值乘以10来维护其整体来确定价值。 |
|短| shortvalueexact()<br>此方法将此bigdecimal转换为短暂的,检查丢失的信息。 |
| int | signum()<br>此方法返回此BigDecimal的Signum函数。 |
| Bigdecimal | striptrairingzeros()<br>此方法返回一个数字,它与此值相同,但使用从表示中删除的任何尾随零。 |
| Bigdecimal |减去(BigDecimal SubTrahend)<br>此方法返回一个重要的值,其值为(this - subtrahend),其比例为max(this.scale(),subtrahend.scale())。 |
| Bigdecimal |减去(BigDecimal SubTrahend,MathContext MC)<br>此方法返回一个大量的值,其值为(this - subtrahend),根据mathcontext设置舍入。 |
| BIGINTEGER | tobiginteger()<br>此方法将此BigDecimal转换为BigInteger。 |
| BIGINTEGER | tobigintegerexact()<br>此方法将此bigdecimal转换为biginteger,检查丢失的信息。 |
|字符串| ToengineeringString()<br>如果需要指数,此方法使用工程符号返回此BigDecimal的字符串表示表示。 |
|字符串| ToplainString()<br>此方法在没有指数字段的情况下返回此BigDecimal的字符串表示。 |
|字符串| ToString()<br>此方法使用科学符号返回此BigDecimal的字符串表示,如果需要指数。 |
| Bigdecimal | ulp()<br>此方法返回此BigDecimal的最后一个位置的ULP的大小。 |
| BIGINTEGER | UnscaledValue()<br>此方法返回一个BigInteger,其值是此BigDecimal的未划算值。 |
|静态大量| valueOf(Double Val)<br>此方法将Double转换为BigDecimal,使用Double.ToString(Double)方法提供的Double的规范字符串表示。 |
|静态大量| valueof(long val)<br>此方法将长值转换为具有零级的大型值。 |
|静态大量| valueof(长未划分的,int缩放)<br> <br>此方法将长期未划分的值和int缩放转换为大二指示。 |

常见问题解答

你怎么能比较两个BigDecimal?

我们可以使用Compareto方法比较两个BigDecimals。

import java.math.*;
class BigDecimalDemo {
 
	public static void main(String[] args) {
 
		//create 2 BigDecimal objects
		BigDecimal b1 = new BigDecimal("60.02");
		BigDecimal b2 = new BigDecimal("20".52);
 
		
        //comparing b1 and b2
		int result = b1.compareTo(b2); 
 
		if( result == -1 )
			System.out.println("First BigDecimal is less than Second BigDecimal");	
		else if( result == 0)
			System.out.println("First BigDecimal is equal to Second BigDecimal");
		else if( result == 1 )
			System.out.println("First BigDecimal is greater than Second BigDecimal");
	}
}

运行上面的程序时,我们将得到以下输出:

First BigDecimal is greater than Second BigDecimal

如何在BigDecalals的情况下设置比例

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalToStringMain {
 
	public static void main(String[] args) {
 
		BigDecimal b = new BigDecimal("11.274675");
		b=b.setScale(3, BigDecimal.ROUND_HALF_UP);
		System.out.println("BigDecimal Rounding to 3 decimal places: "+b);
	}
}

运行上面的程序时,我们将得到以下输出:

BigDecimal Rounding to 3 decimal places: 11.275

如何将字符串转换为bigdecimal?

我们只需使用BigDecimal的构造函数将字符串转换为BigDecimal

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalToStringMain {
 
	public static void main(String[] args) {
		
		String currency="23.12";
		BigDecimal bigDecimalCurrency=new BigDecimal(currency);
		System.out.println("Converted String currency to bigDecimalCurrency: "+bigDecimalCurrency);
	}
}

运行上面的程序时,我们将得到以下输出:

Converted String currency to bigDecimalCurrency: 23.12

如何将BigDecimal转换为字符串?

我们可以简单地使用BigDecimal的ToString方法将BigDecimal转换为String。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalToStringMain {
 
	public static void main(String[] args) {
		BigDecimal bigDecimal=new BigDecimal("12.92");
		String toStringBigDec=bigDecimal.toString();
		System.out.println(toStringBigDec);
	}
}

运行上面的程序时,我们将得到以下输出:

12.92

运行上面的程序时,我们将得到以下输出:

Converted String currency to bigDecimalCurrency: 23.12

如何在Java中进行两个BigDecimal相加?

我们可以使用BigDecimal的Add方法划分两个BigDecimals。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalDivideMain {
 
	public static void main(String args[])
	{
		BigDecimal b1=new BigDecimal("10.2");
		BigDecimal b2=new BigDecimal("2.4");
		BigDecimal result=b1.add(b2);
		System.out.println(result.toString());
	}
}

运行上面的程序时,我们将得到以下输出:

12.6

如何在Java中进行两个BigDecimal相减?

我们可以使用BigDecimal的缓和方法划分两个BigDecimals。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalDivideMain {
 
	public static void main(String args[])
	{
		BigDecimal b1=new BigDecimal("10.2");
		BigDecimal b2=new BigDecimal("2.4");
		BigDecimal result=b1.subtract(b2);
		System.out.println(result.toString());
	}
}

运行上面的程序时,我们将得到以下输出:

7.8

如何在Java中两个BigDecimal相乘?

我们可以使用BigDecimal的乘法方法来乘以两个BigDecimals。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalDivideMain {
 
	public static void main(String args[])
	{
		BigDecimal b1=new BigDecimal("10.2");
		BigDecimal b2=new BigDecimal("2.4");
		BigDecimal result=b1.multiply(b2);
		System.out.println(result.toString());
	}
}

运行上面的程序时,我们将得到以下输出:

24.48

如何在Java中进行两个BigDecimal相除?

我们可以使用BigDecimal的divide方法相除两个BigDecimals。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalDivideMain {
 
	public static void main(String args[])
	{
		BigDecimal b1=new BigDecimal("10.2");
		BigDecimal b2=new BigDecimal("2.4");
		BigDecimal result=b1.divide(b2);
		System.out.println(result.toString());
	}
}

运行上面的程序时,我们将得到以下输出:

4.25

如何从BigDecimal删除尾随零?

我们可以使用TirtRairingZEROS从BigDecimal中删除尾部零。

package org.igi.theitroad;
 
import java.math.BigDecimal;
 
public class BigDecimalDivideMain {
 
	public static void main(String args[])
	{
		BigDecimal b1=new BigDecimal("10.200");
		System.out.println(b1.stripTrailingZeros().toPlainString());
	}
}

运行上面的程序时,我们将得到以下输出:

10.2