概述
BigDecimal一共有4个构造方法:
BigDecimal(int) 创建一个具有参数所指定整数值的对象
BigDecimal(double) 创建一个具有参数所指定双精度值的对象(不建议采用)
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象
在创建时,必须要提醒大家注意的是,在这里,括号中的参数一定要使用字符串,而不能是浮点值(虽然也支持浮点类型的参数)。这是因为在计算机中,浮点值是不精确的。你写入一个 1,很可能在内部实际保存的是 1.00000001。而字符串则不同,它是可以精确表示的。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
BigDecimal bInt = new BigDecimal(1);
BigDecimal bString = new BigDecimal("1.2");
BigDecimal bDouble = new BigDecimal(1.2);
System.out.println("bString" + bString);
System.out.println("bDouble" + bDouble);
}
}
当double必须用作BigDecimal的源时,请使用Double.toString(double)转成String,然后使用String构造方法,或使用BigDecimal的静态方法valueOf,如下:
BigDecimal bigDecimal = new BigDecimal(Double.toString(1.2));
BigDecimal bigDecimal = BigDecimal.valueOf(1.2);
BigDecimal对货币和百分比格式化
public class Test {
public static void main(String[] args) {
BigDecimal bigLoanAmount = new BigDecimal("1234567890"); //创建BigDecimal对象
BigDecimal bigInterestRate = new BigDecimal("10.1234467");
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用
NumberFormat percent = NumberFormat.getPercentInstance(); //建立百分比格式化用
percent.setMaximumFractionDigits(3); //百分比小数点最多3位
//利用BigDecimal对象作为参数在format()中调用货币和百分比格式化
System.out.println("Loan amount:t" + currency.format(bigLoanAmount));
System.out.println("Interest rate:t" + percent.format(bigInterestRate));
}
}
BigDecimal加减乘除运算
public BigDecimal add(BigDecimal value); //加法
public BigDecimal subtract(BigDecimal value); //减法
public BigDecimal multiply(BigDecimal value); //乘法
public BigDecimal divide(BigDecimal value); //除法
例子:
public class Test {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10"); //创建BigDecimal对象
BigDecimal b = new BigDecimal("20");
System.out.println("加法:" + a.add(b));
System.out.println("减法:" + a.subtract(b));
System.out.println("除法:" + a.divide(b));
System.out.println("乘法:" + a.multiply(b));
}
}
需要注意的divide除法,可能会出现4.5/1.3,这时用上面的方法会报错java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
这时我们可以用divide的其他重载的方法,divide方法有可以传三个参数:public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 第一参数表示除数, 第二个参数表示小数点后保留位数,第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式,有下面这几种:
ROUND_CEILING //向正无穷方向舍入
ROUND_ROWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边的距离是相等的,如果是这样,向下舍入,例如1.55 保留一位小数位1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边的距离是相等的,如果是这样,如果保留位数是奇数,是用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边的距离是相等的,如果是这样,向上舍入,1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
最后
以上就是会撒娇芒果为你收集整理的BigDecimal的简单使用的全部内容,希望文章能够帮你解决BigDecimal的简单使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复