BigDecimal类常用方法

该代码示例展示了如何使用Java的BigDecimal类进行数学运算,如加减乘除、取余、绝对值等,并讨论了MathContext在控制精度和舍入模式中的应用。此外,还提到了BigDecimal的其他方法,如转换数据类型、比较和格式化输出。
摘要由CSDN通过智能技术生成
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的 未缩放值 。



   }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值