BigDecimal类提供对双精度数字的运算,用于算术、刻度处理、舍入、比较、格式转换和散列。它可以处理非常大和非常小的浮点数,精度很高,但时间复杂度有所补偿。 BigDecimal由一个随机精度整数无标度值和一个32位整数标度组成。如果大于或等于零,则刻度为小数点右侧的位数。如果小于零,则数字的未标度值乘以10^(-scale)。
null
例如:
Input : double a=0.03; double b=0.04; double c=b-a; System.out.println(c); Output :0.009999999999999998 Input : BigDecimal _a = new BigDecimal("0.03"); BigDecimal _b = new BigDecimal("0.04"); BigDecimal _c = _b.subtract(_a); System.out.println(_c); Output :0.01
需要大十进制
- 两种java原语类型(double和float)都是浮点数,它们存储为分数和指数的二进制表示形式。
- 其他基本类型(布尔型除外)是定点数。与定点数字不同,浮点数在大多数情况下会返回一个带有小错误的答案(大约10^-19)。这就是为什么在上面的示例中,我们最终得到0.009999999998,结果是0.04-0.03。
但BigDecimal为我们提供了确切的答案。
// Java Program to illustrate BigDecimal Class import java.math.BigDecimal; public class BigDecimalExample { public static void main(String[] args) { // Create two new BigDecimals BigDecimal bd1 = new BigDecimal( "124567890.0987654321" ); BigDecimal bd2 = new BigDecimal( "987654321.123456789" ); // Addition of two BigDecimals bd1 = bd1.add(bd2); System.out.println( "BigDecimal1 = " + bd1); // Multiplication of two BigDecimals bd1 = bd1.multiply(bd2); System.out.println( "BigDecimal1 = " + bd1); // Subtraction of two BigDecimals bd1 = bd1.subtract(bd2); System.out.println( "BigDecimal1 = " + bd1); // Division of two BigDecimals bd1 = bd1.divide(bd2); System.out.println( "BigDecimal1 = " + bd1); // BigDecima1 raised to the power of 2 bd1 = bd1.pow( 2 ); System.out.println( "BigDecimal1 = " + bd1); // Negate value of BigDecimal1 bd1 = bd1.negate(); System.out.println( "BigDecimal1 = " + bd1); } } |
输出:-
BigDecimal1 = 1112222211.2222222211 BigDecimal1 = 1098491072963113850.7436076939614540479 BigDecimal1 = 1098491071975459529.6201509049614540479 BigDecimal1 = 1112222210.2222222211 BigDecimal1 = 1237038244911605079.77528397755061728521 BigDecimal1 = -1237038244911605079.77528397755061728521
公告
double a, b; BigDecimal A, B;
初始化:
a = 5.4; b = 2.3; A = BigDecimal.valueOf(5.4); B = BigDecimal.valueOf(2.3);
如果给您一个双精度数字的字符串表示形式,则可以按以下方式初始化:
A = new BigDecimal(“5.4”); B = new BigDecimal(“1238126387123.1234”);
为了便于初始化,BigDecimal类有一些预定义的常量:
A = BigDecimal.ONE; // Other than this, available constants // are BigDecimal.ZERO and BigDecimal.TEN
数学运算:
int c = a + b; BigDecimal C = A.add(B); Other similar function are subtract() , multiply(), divide(), pow()
但所有这些函数,除了pow()以整数为参数外,都以BigDecimal为参数,所以如果我们希望这些带小数或字符串的操作,在将它们传递给函数之前,将它们转换为BigDecimal,如下所示:
String str = “123456789.123456789”; BigDecimal C = A.add(new BigBigDecimal(str)); double val = 123456789.123456789; BigDecimal C = A.add(BigDecimal.valueOf(val));
从BigDecimal中提取值:
// value should be in limit of double x double x = A.doubleValue(); // To get string representation of BigDecimal A String z = A.toString();
比较:
if (a < b) {} // For primitive double if (A.compareTo(B) < 0) {} // For BigDecimal
实际上,compareTo根据值返回-1(小于)、0(等于)、1(大于)。
为了实现平等,我们还可以使用:
if (A.equals(B)) {} // A is equal to B
BigDecimal类的方法:
- 大十进制abs() :此方法返回一个BigDecimal,其值为该BigDecimal的绝对值,其刻度为。缩放()。
- 大十进制abs(马修) :此方法返回一个BigDecimal,其值为该BigDecimal的绝对值,并根据上下文设置进行舍入。
- 大十进制加法(完) :此方法返回一个BigDecimal,其值为(This+augend),其刻度为max(This.scale(),augend)。scale())。
- 大十进制加法(BigDecimal augend,MathContext mc) :此方法返回一个BigDecimal,其值为(This+augend),并根据上下文设置进行舍入。
- 字节字节值精确() :此方法将此BigDecimal转换为字节,以检查丢失的信息。
- 比较(BigDecimal val) :此方法将此BigDecimal与指定的BigDecimal进行比较。
- 大十进制除法(大十进制除数) :此方法返回一个BigDecimal,其值为(This/divisior),首选的小数位数为(This.scale()–divisior)。比例();如果无法表示精确的商(因为它有一个非终止的十进制扩展),将引发算术异常。
- 大十进制除法(大十进制除数、整数刻度、舍入模式舍入模式) :此方法返回一个BigDecimal,其值为(This/除数),其小数位数为指定值。
- 大十进制除法(大十进制除数,MathContext mc) :此方法返回一个BigDecimal,其值为(This/除数),并根据上下文设置进行舍入。
- 大十进制除法(大十进制除数,舍入模式舍入模式) :此方法返回一个BigDecimal,其值为(This/除数),其小数位数为。缩放()。
- BigDecimal[]除法和除法器(大十进制除数) :此方法返回一个两元素的BigDecimal数组,该数组包含divideToIntegralValue的结果,后跟两个操作数的余数结果。
- BigDecimal[]除法和除法器(大十进制除数,MathContext mc) :此方法返回一个两元素的BigDecimal数组,其中包含divideToIntegralValue的结果,后跟根据上下文设置通过舍入计算的两个操作数的余数结果。
- 大十进制除法积分值(大十进制除数) :此方法返回一个BigDecimal,其值是向下舍入的商(此/除数)的整数部分。
- 大十进制除法积分值(大十进制除数,MathContext mc) :此方法返回一个BigDecimal,其值是(This/除数)的整数部分。
- 双倍值() :此方法将此BigDecimal转换为double。
- 布尔等于(对象x) :此方法将此BigDecimal与指定的对象进行相等比较。
- 浮动值() :此方法将此BigDecimal转换为浮点。
- int哈希代码() :此方法返回此BigDecimal的哈希代码。
- int值() :此方法将此BigDecimal转换为int。
- int intValueExact() :此方法将此BigDecimal转换为int,以检查丢失的信息。
- 长期价值() :此方法将此BigDecimal转换为long。
- 长时间精确() :此方法将此BigDecimal转换为long,以检查丢失的信息。
- 最大十进制数(BigDecimal val) :此方法返回此BigDecimal和val的最大值。
- 大十进制最小值(BigDecimal val) :此方法返回此BigDecimal和val的最小值。
- 大小数点左移(int n) :此方法返回一个BigDecimal,它相当于将小数点向左移动n位的BigDecimal。
- 大小数点对吗(int n) :此方法返回一个BigDecimal,它相当于将小数点向右移动n位的BigDecimal。
- 大十进制乘法(大十进制被乘数) :此方法返回一个BigDecimal,其值为(This×被乘数),其小数位数为(This.scale()+被乘数)。scale())。
- 大十进制乘法(BigDecimal被乘数,MathContext mc) :此方法返回一个BigDecimal,其值为(This×被乘数),并根据上下文设置进行舍入。
- 大十进制否定() :此方法返回一个BigDecimal,其值为(-This),其小数位数为This。缩放()。
- 大十进制否定(马修) :此方法返回一个BigDecimal,其值为(-This),并根据上下文设置进行舍入。
- 大十进制加号() :此方法返回一个BigDecimal,其值为(+This),其小数位数为This。缩放()。
- 大十进制加号(马修) :此方法返回值为(+This)的BigDecimal,并根据上下文设置进行舍入。
- 大十进制功率(int n) :此方法返回一个BigDecimal,其值为(thisn),幂的计算精度不受限制。
- 大十进制功率(int n,MathContext mc) :此方法返回一个值为(thisn)的BigDecimal。
- 整数精度() :此方法返回此BigDecimal的精度。
- 大十进制余数(大十进制除数) :此方法返回一个BigDecimal,其值为(此%除数)。
- 大十进制余数(大十进制除数,MathContext mc) :此方法返回一个BigDecimal,其值为(此%除数),并根据上下文设置进行舍入。
- 大十进制四舍五入(马修) :此方法返回根据MathContext设置取整的BigDecimal。
- 整数刻度() :此方法返回此BigDecimal的小数位数。
- BigDecimal scaleByPowerOfTen(int n) :此方法返回一个BigDecimal,其数值等于(此*10n)。
- 大十进制设置刻度(国际新闻级) :此方法返回一个BigDecimal,其刻度为指定值,其值在数字上等于此BigDecimal。
- 大十进制设置刻度(int newScale,RoundingMode RoundingMode) :此方法返回一个BigDecimal,其刻度为指定值,其未刻度值是通过将该BigDecimal的未刻度值乘以或除以适当的十次幂来确定的,以保持其整体值。
- 短值精确() :此方法将此BigDecimal转换为short,以检查丢失的信息。
- 内部信号() :此方法返回此BigDecimal的signum函数。
- 大十进制sqrt(马修) :此方法根据上下文设置,通过四舍五入,返回该值的平方根近似值。
- 大十进制带零() :此方法返回一个BigDecimal,该值在数值上等于此值,但从表示中删除了任何尾随零。
- 大十进制减法(大十进制减数) :此方法返回一个BigDecimal,其值为(This–subtrahand),其刻度为max(This.scale(),subtrahand)。scale())。
- 大十进制减法(BigDecimal subtrahand,MathContext mc) :此方法返回一个BigDecimal,其值为(This–subtrahand),并根据上下文设置进行舍入。
- BigInteger Tobiginger() :此方法将此BigDecimal转换为BigInteger。
- BigInteger ToBiginteRexact() :此方法将此BigDecimal转换为BigInteger,以检查丢失的信息。
- 字符串到工程字符串() :此方法返回此BigDecimal的字符串表示形式,如果需要指数,则使用工程符号。
- 弦顶弹() :此方法返回此BigDecimal的字符串表示形式,不带指数字段。
- 串到串() :此方法返回此BigDecimal的字符串表示形式,如果需要指数,则使用科学记数法。
- 大十进制ulp() :此方法返回此BigDecimal的ulp大小,即最后一位的单位。
- 大整数非标度值() :此方法返回一个BigInteger,其值是此BigDecimal的未标度值。
- 静态BigDecimal值(双倍增值) :此方法使用double提供的double的规范字符串表示形式将double转换为BigDecimal。toString(双重)方法。
- 静态BigDecimal值(朗瓦尔) :此方法将长值转换为小数位数为零的BigDecimal。
- 静态BigDecimal值(长未标度,整数标度) :此方法将长的无标度值和整数标度转换为BigDecimal。
有关更多示例,请访问 Java BigDecimal示例 相关文章:
有关更多功能和详细信息,请参阅 类BigDecimal
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END