BigDecimal类的基础使用

简介

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算,一般用于商业计算。主要提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。

BigDecimal的构造方法

单个参数的构造方法,主要支持传入BigInteger,Char[],String,double类型,char[]数组类似String,而BigInteger和double均需要进行转换,而String得到的确是几乎精确的值,例如new BigDecimal(“1”), 数值几乎确定为1,而没有其他精度计算等,所以一般建议使用String构造参数.

两个参数的构造方法,例如
BigDecimal(BigInteger val, MathContext mc) 将 BigInteger 转换为 BigDecimal(根据上下文设置进行舍入)。
第一个参数类似单个参数所支持的类型,第二个参数可以规定舍入规则。

其他构造参数不具体列出,可参看官网api

BigDecimal进行加减乘除运算

此处只介绍最基本的,带舍入规则的参看官网api
add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。

package baseJava;

import java.math.BigDecimal;

public class BigDecimalTest {

	public static void main(String[] args) {
		BigDecimal m = new BigDecimal("6.0");
        BigDecimal n = new BigDecimal("2.0");

        System.out.println("m + n =" + m.add(n));
        System.out.println("m - n =" + m.subtract(n));
        System.out.println("m * n =" + m.multiply(n));
        System.out.println("m / n =" + m.divide(n));
	}
}

运行结果
在这里插入图片描述
从上图可以看出BigDecimal的精度计算和Java中的Integer,double等类不一样。

BigDecimal除法不能整除时报错测试

public static void errorDivide() {
		BigDecimal m = new BigDecimal("6.0");
        BigDecimal n = new BigDecimal("1.4");
        System.out.println("m / n =" + m.divide(n));
	}

在这里插入图片描述
如上图可以看出,当除法不可以整除时会报错,所以在使用时要注意这个。

BigDecimal设置精确到小数点第几位

如果需要对计算记过进行截断和四舍五入可用setScale方法

public static void scaleTest() {
		BigDecimal m = new BigDecimal("2.888888");
        BigDecimal n = new BigDecimal("1.4121212121");
        System.out.println("不设置精度之前     m * n =" + m.multiply(n));
        // 第一个参数是保留到多少位,第二个参数设置舍入规则
        System.out.println("设置精度之后     m * n =" + m.multiply(n).setScale(3, RoundingMode.HALF_UP));
	}

运行结果:
在这里插入图片描述

BigDecimal进行格式化

利用java.text.NumberFormat中的format方法,对BigDecimal数据格式化,得到商业计算的格式化数据。

public static void format() {
		//建立货币格式化引用 
		NumberFormat currencyInstance = NumberFormat.getCurrencyInstance();
		//建立百分比格式化引用 
	    NumberFormat percentInstance = NumberFormat.getPercentInstance();
	    //百分比小数点最多3位 
	    percentInstance.setMaximumFractionDigits(3);
	    //金额
	    BigDecimal amount = new BigDecimal("9999.88");
	    //利率  
	    BigDecimal interestRate = new BigDecimal("0.006"); 
	    // 利息
	    BigDecimal interest = amount.multiply(interestRate); 

	    System.out.println("贷款金额:" + currencyInstance.format(amount)); 
	    System.out.println("利率:" + percentInstance.format(interestRate)); 
	    System.out.println("利息:" + currencyInstance.format(interest)); 
	}
BigDecimal中数据的比较
public static void compare() {
		BigDecimal m = new BigDecimal("6.0");
        BigDecimal n = new BigDecimal("1.4");
        BigDecimal l = new BigDecimal("6.0");
        System.out.println("m和n的比较结果" + m.compareTo(n));
        System.out.println("n和m的比较结果" + n.compareTo(m));
        System.out.println("l和m的比较结果" + l.compareTo(m));
	}

在这里插入图片描述
由运行结果可以看出1表示大于,-1表示小于,0表示相等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值