package day0329; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.time.LocalDate; import java.util.Arrays; /** * @author 22068 HeChuan */ public class BigDecimal类 { public static void main(String[] args) { char[] chars = {'0','.', '1', '4' ,'9'}; BigDecimal chares = new BigDecimal(chars); String str = "-3.1415"; BigDecimal strs = new BigDecimal(str); BigDecimal b1 = new BigDecimal(10); BigDecimal b2 = new BigDecimal(3); BigDecimal bd1 = new BigDecimal(3.1415926); BigDecimal bd2 = new BigDecimal(1.11); //BigDecimal abs() 返回绝对值 System.out.println("绝对值:"+strs.abs()); /** * static MathContext DECIMAL32 * A MathContext对象,其精度设置与IEEE 754R Decimal32格式,7位数字以及 HALF_EVEN的舍入模式(IEEE 754R默认值)匹配。 * static MathContext DECIMAL64 * A MathContext对象,其精度设置与IEEE 754R Decimal64格式,16位数字和 HALF_EVEN (IEEE 754R默认值)的舍入模式 匹配 。 * static MathContext DECIMAL128 * A MathContext对象,其精度设置与IEEE 754R Decimal128格式,34位数字和 HALF_EVEN的舍入模式(IEEE 754R默认值)匹配。 * static MathContext UNLIMITED * 一个 MathContext对象,其设置具有无限精度算术所需的值。 */ System.out.println("绝对值(32精度):"+strs.abs(MathContext.DECIMAL32)); //BigDecimal abs(MathContext mc) 返回一个 BigDecimal ,其值为此 BigDecimal的绝对值,根据上下文设置进行舍入。 //BigDecimal add(BigDecimal augend) 返回 BigDecimal ,其值是 (this + augend) ,其标为 max(this.scale(), augend.scale()) 。 //BigDecimal add(BigDecimal augend, MathContext mc) 返回 BigDecimal ,其值是 (this + augend) ,根据上下文设置进行舍入。 System.out.println(bd1.add(bd2)); BigDecimal sum = bd1.add(bd2,MathContext.DECIMAL64); System.out.println("和为"+sum+",标为:"+sum.scale()); //BigDecimal subtract(BigDecimal subtrahend) 返回 BigDecimal ,其值是 (this - subtrahend) ,其标为 max(this.scale(), subtrahend.scale()) 。 //BigDecimal subtract(BigDecimal subtrahend, MathContext mc) 返回 BigDecimal ,其值是 (this - subtrahend) ,根据上下文设置进行舍入。 System.out.println(b1.subtract(b2,MathContext.DECIMAL32)); //BigDecimal multiply(BigDecimal multiplicand) 返回 BigDecimal ,其值是 (this × multiplicand),其标为 (this.scale() + multiplicand.scale()) 。 //BigDecimal multiply(BigDecimal multiplicand, MathContext mc) 返回 BigDecimal ,其值是 (this × multiplicand),根据上下文设置进行舍入。 System.out.println(b1.multiply(b2,MathContext.DECIMAL64)); //BigDecimal remainder(BigDecimal divisor) 返回 BigDecimal ,其值是 (this % divisor) 。取余 //BigDecimal remainder(BigDecimal divisor, MathContext mc) 返回 BigDecimal ,其值是 (this % divisor) ,根据上下文设置进行舍入。 System.out.println(b1.remainder(b2,MathContext.DECIMAL32)); /** * BigDecimal divide(BigDecimal divisor) * 优先级为(this.scale() - divisor.scale()) ; 如果不能表示确切的商(因为它具有非终止的十进制扩展),则抛出一个ArithmeticException 。 * BigDecimal divide(BigDecimal divisor, int roundingMode) * 返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale() 。 * BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) * 返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。 * BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode) * 返回一个 BigDecimal ,其值为 (this / divisor) ,其比例为指定。 * BigDecimal divide(BigDecimal divisor, MathContext mc) * 返回 BigDecimal ,其值是 (this / divisor) ,根据上下文设置进行舍入。 * BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode) * 返回 BigDecimal ,其值是 (this / divisor) ,其标为 this.scale() 。 */ //System.out.println(bd1.divide(bd2));除不尽抛出一个ArithmeticException System.out.println(b1.divide(b2,2)); System.out.println(b1.divide(b2,5,2)); System.out.println(b1.divide(b2,6,RoundingMode.HALF_UP)); System.out.println(b1.divide(b2,MathContext.DECIMAL128)); System.out.println(b1.divide(b2,RoundingMode.DOWN)); //BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)返回商和余数数组,10➗3 = 3---1,可以指定位数 BigDecimal[] bds = b1.divideAndRemainder(b2); System.out.println(Arrays.toString(bds)); for (BigDecimal bd : bds) { System.out.println(bd); } /** * 数据类型转换 * double doubleValue() * 将此 BigDecimal转换为 double 。 * float floatValue() * 将此 BigDecimal转换为 float 。 * int intValue() * 将此 BigDecimal转换为 int 。 * long longValue() * 将此 BigDecimal转换为 long 。 * BigInteger toBigInteger() * 将此 BigDecimal转换为 BigInteger 。 * static BigDecimal valueOf(double val) * 转换一个 double成 BigDecimal ,使用 double通过所提供的规范的字符串表示 Double.toString(double)方法。 * static BigDecimal valueOf(long val) * 将 long值转换为 BigDecimal ,比例为零。 * static BigDecimal valueOf(long unscaledVal, int scale) * 将 long值和 int比例转换为 BigDecimal 。 * * intValueExact()方法将此BigDecimal转换为int类型,并抛出ArithmeticException异常,如果此BigDecimal的值不是整数或超出int类型的范围。 * intValue()方法将此BigDecimal转换为int类型,并将其截断为整数部分。如果此BigDecimal的值超出int类型的范围,则返回int类型的最大值或最小值。 * int intValueExact() * 将此 BigDecimal转换为 int ,检查丢失的信息。 * long longValueExact() * 将此 BigDecimal转换为 long ,检查丢失的信息。 * byte byteValueExact() * 将此 BigDecimal转换为 byte ,检查丢失的信息。 * short shortValueExact() * 将此 BigDecimal转换为 short ,检查丢失的信息. * BigInteger toBigIntegerExact() * 将此 BigDecimal转换为 BigInteger ,检查丢失的信息。 */ BigDecimal by = new BigDecimal(12); byte b = by.byteValueExact(); System.out.println(by+"__"+b); //boolean equals(Object x) 将此 BigDecimal与指定的 Object进行比较以获得相等性。 String stre = "10"; int a = 10; System.out.println(b1.equals(stre)+""+b1.equals(a)); //标scale System.out.println("bd1标为"+bd1.scale()); //int compareTo(BigDecimal val) 将此 BigDecimal与指定的BigDecimal进行比较 返回值为不同1和相同0。 System.out.println(bd1.compareTo(bd1)); //int hashCode() 返回此 BigDecimal的哈希码。 System.out.println(b1.hashCode()); //BigDecimal max(BigDecimal val) 返回此 BigDecimal和 val 。 //BigDecimal min(BigDecimal val) 返回此 BigDecimal和 val 。 System.out.println(b1.max(b2)+""+b1.min(b2)); //BigDecimal movePointLeft(int n) 返回一个 BigDecimal ,相当于这个小数点,向左移动了 n个地方。 //BigDecimal movePointRight(int n) 返回一个 BigDecimal ,相当于这个小数点移动了 n个地方。 BigDecimal bigDecimal = new BigDecimal(123.456,MathContext.DECIMAL64); System.out.println(bigDecimal.movePointLeft(2)); System.out.println(bigDecimal.movePointRight(3)); //BigDecimal negate() 返回 BigDecimal ,其值是 (-this) ,其标为 this.scale() 。变成负数 //BigDecimal negate(MathContext mc) 返回 BigDecimal ,其值是 (-this) ,根据上下文设置进行舍入。 //BigDecimal plus() 返回 BigDecimal ,其值是 (+this) ,其标为 this.scale() 。变成正数 //BigDecimal plus(MathContext mc) 返回 BigDecimal ,其值是 (+this) ,根据上下文设置进行舍入。 System.out.println(bigDecimal.negate(MathContext.DECIMAL64)); System.out.println(bigDecimal.plus(MathContext.DECIMAL64)); //BigDecimal pow(int n) 返回 BigDecimal ,其值是 (this^n),该电源,准确计算,使其具有无限精度。 次方、幂 //BigDecimal pow(int n, MathContext mc) 返回 BigDecimal ,其值是 (this^n)。 System.out.println(b1.pow(3,MathContext.DECIMAL32)); //int precision() 返回此 BigDecimal的 精度数 。 System.out.println(b1.precision()); //BigDecimal round(MathContext mc) 返回 BigDecimal根据四舍五入 MathContext设置。 System.out.println(bigDecimal.round(MathContext.DECIMAL32)); //BigDecimal scaleByPowerOfTen(int n) 返回一个BigDecimal,其数值等于( this * 10^n )。 System.out.println(b2.scaleByPowerOfTen(4)); //BigDecimal setScale(int newScale) 返回一个 BigDecimal ,其大小是指定值,其值在数字上等于此 BigDecimal 。 //BigDecimal setScale(int newScale, int roundingMode) 返回一个 BigDecimal ,其规模是指定值,其缩放值通过将此 BigDecimal的非标度值乘以10的适当功率来确定,以维持其总体值。 //BigDecimal setScale(int newScale, RoundingMode roundingMode) 返回一个 BigDecimal ,其规模是指定值,其缩放值通过将该 BigDecimal的非标度值乘以10的适当功率来确定,以维持其整体值。 System.out.println(sum.setScale(4,3)); //int signum() 返回这个 BigDecimal的signum函数。正数返回1 负数返回-1 0返回0 System.out.println(b1.signum()); //BigDecimal stripTrailingZeros() 返回一个 BigDecimal ,它在数字上等于此值, BigDecimal表示中删除任何尾随的零。 BigDecimal big00 = new BigDecimal(1.3000000,MathContext.DECIMAL64); System.out.println(big00.stripTrailingZeros()); //String toEngineeringString() 如果需要指数,则使用工程符号返回此 BigDecimal的字符串表示形式。 //String toPlainString() 返回没有指数字段的此 BigDecimal的字符串表示形式。 //String toString() 返回此 BigDecimal的字符串表示,如果需要指数,则使用科学计数法。 //BigDecimal ulp() 返回此 BigDecimal的最后一个位置的ulp(一个单位)的大小。 //BigInteger unscaledValue() 返回一个 BigInteger ,其值是此 BigDecimal的 未缩放值 。 } }
BigDecimal类常用方法
最新推荐文章于 2023-05-14 17:58:53 发布
该代码示例展示了如何使用Java的BigDecimal类进行数学运算,如加减乘除、取余、绝对值等,并讨论了MathContext在控制精度和舍入模式中的应用。此外,还提到了BigDecimal的其他方法,如转换数据类型、比较和格式化输出。
摘要由CSDN通过智能技术生成