JAVA高精度符点运算BigDecimal类实例详解

with 0 comment

在JAVA语言中使用默认的double数据类型进行符点运算时会造成精度丢失的情况,在java.math包提供的BigDecimal类则是专门提供高精度的符点运算能力。

构造初始化

BigDecimal类提供了四种构造方法进行对象的初始化,分别可以传入:int、double、long、string。
特别注意:即使表面上看起来一样的值,不同类型传入的最终值是不一样,比如doule类型的数据小数位会变得很长。
BigDecimal类对象可以与int、double、long、string进行互转。

//创建BigDecimal类对象
BigDecimal intBD = new BigDecimal(123);
BigDecimal douBD = new BigDecimal(123.123);
BigDecimal strBD = new BigDecimal("123");
BigDecimal sdrBD = new BigDecimal("123.123");

四类基本运算

BigDecimal类提供了数学世界中的四类基本运算方法。

//创建两个运算值
BigDecimal noOne = new BigDecimal(123);
BigDecimal noTwo = new BigDecimal(123);
//加法
BigDecimal addAs = noOne.add(noTwo);
//减法
BigDecimal subAs = noOne.subtract(noTwo);
//乘法
BigDecimal mulAs = noOne.multiply(noTwo);
//除法
BigDecimal divAs = noOne.divide(noTwo);
//需要注意除法被除数不能为0哦
//另一种写法(直接新建构造类)
BigDecimal othAs = noOne.add(new BigDecimal(123));

除法精度控制

BigDecimal类除法可以提供精度控制能力,具有三个入参分别是:被除数、小数位数、尾数取值模式。

//除法实例,保留三位小数,四舍五入模式
BigDecimal divAs = noOne.divide(noTwo,3,BigDecimal.ROUND_HALF_UP);
//删除多余位数
BigDecimal.ROUND_DOWN;
//删除多余位数,最后一位进一位
BigDecimal.ROUND_UP;
//四舍五入
BigDecimal.ROUND_HALF_UP;
//五舍六入
BigDecimal.ROUND_HALF_DOWN;

数据精度控制

BigDecimal类独立提供了对数据进行精度控制的方法。

//对已有数据进行精度控制,逡巡上方的几类模式,保留三位四舍五入
noTwo = noTwo.setScale(3, BigDecimal.ROUND_HALF_UP);

数值格式化

//建立货币格式化引用
NumberFormat currency = NumberFormat.getCurrencyInstance();
//建立百分比格式化用
NumberFormat percent = NumberFormat.getPercentInstance();
//百分比小数点最多3位
percent.setMaximumFractionDigits(3);
//对数据进行货币格式化
currency.format(mulAs);
//对数据进行百分比格式化
percent.format(divAs);

数值大小比较

BigDecimal类的大小比较,返回一个int结果,有三个结果。
1表示大于,0表示等于,-1表示小于。

int cpAs = noOne.compareTo(noTwo);
//BigDecimal类还提供了一些用于比较的常量,比如BigDecimal.ZERO
//与零进行比较
int cpAs = noOne.compareTo(BigDecimal.ZERO);
Comments are closed.