java BigDecimal 基础操作加减乘除,比较大小,转换

BigDecimal 加减乘除方法调用

BigDecimal add(BigDecimal augend) 加法运算
BigDecimal subtract(BigDecimal subtrahend) 减法运算
BigDecimal multiply(BigDecimal multiplicand) 乘法运算
BigDecimal divide(BigDecimal divisor) 除法运算

BigDecimal 比较大小

//前提为a、b均不能为null
if(a.compareTo(b) == -1){System.out.println("a小于b");}
if(a.compareTo(b) == 0) {System.out.println("a等于b");}
if(a.compareTo(b) == 1) {System.out.println("a大于b");}
if(a.compareTo(b) > -1) {System.out.println("a大于等于b");}
if(a.compareTo(b) < 1)  {System.out.println("a小于等于b");}

BigDecimal 转换

1:String 与 BigDecimal 互相转换

String string = "5.5";
//String 转 BigDecimal
BigDecimal bigDecimalValue = new BigDecimal(string);
System.out.println("String转BigDecimal后:"+bigDecimalValue);
//BigDecimal 转 String
String stringValue = bigDecimalValue.toString();
System.out.println("BigDecimal转String后:"+stringValue);
  

2:int 与 BigDecimal 互相转换

int i = 5;
//int 转 BigDecimal
BigDecimal bigDecimalValue = new BigDecimal(i);
System.out.println("int转BigDecimal后:"+bigDecimalValue);
//BigDecimal 转 int
int j = bigDecimalValue.intValue();
System.out.println("BigDecimal转int后:"+j);

3:double 与 BigDecimal 互相转换

double d = 5.5;
//double 转 BigDecimal 时 要先把double转为String类型
BigDecimal bigDecimalValue = new BigDecimal(Double.toString(d));//注意这里要划重点,double直接转为BigDecimal会因为精度问题导致不准确,下面会详细说明
System.out.println("double转BigDecimal后:"+bigDecimalValue);
//double 转 BigDecimal (第二种方法)
BigDecimal bigDecimalValue2 = BigDecimal.valueOf(d);
System.out.println("double转BigDecimal后:"+bigDecimalValue2);
//BigDecimal 转 double
double j = bigDecimalValue.doubleValue();
System.out.println("BigDecimal转double后:"+j);

BigDecimal四舍五入保留两位小数

import java.math.BigDecimal;
 
public class Test {
    public static void main(String[] args) {
        BigDecimal bd = new BigDecimal("3.1415926");
        bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd);   //输出结果为3.14
    }
}

BigDecimal.setScale() 方法可以将 BigDecimal 对象四舍五入后保留指定小数位数,其中第一个参数表示小数点后保留的位数,第二个参数表示使用四舍五入策略。

其中,ROUND_HALF_UP 是 BigDecimal 官方提供的四舍五入策略,表示直接将舍去部分加 0.5 后再进行向上舍入。

BigDecimal四舍五入保留一位小数

import java.math.BigDecimal;
 
public class Test {
    public static void main(String[] args) {
        BigDecimal bd = new BigDecimal("3.1415926");
        bd = bd.setScale(1, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd);   //输出结果为3.1
    }
}

同上,只需要将第一个参数改为1即可。

BigDecimal四舍五入方法
假设有一个 BigDecimal 对象 bd,想对其保留两位小数并使用四舍五入策略,可以使用以下代码:
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);

具体可选的四舍五入策略有:

ROUND_UP:向上舍入
ROUND_DOWN:向下舍入
ROUND_CEILING:向正无穷舍入
ROUND_FLOOR:向负无穷舍入
ROUND_HALF_UP:四舍五入
ROUND_HALF_DOWN:五舍六入
ROUND_HALF_EVEN:银行家舍入
ROUND_UNNECESSARY:不需要舍入

BigDecimal四舍五入模式
在使用 BigDecimal.setScale() 方法时,有一些小细节需要注意,例如当要保留的小数位数为 0 时,需要使用 ROUND_HALF_UP 模式才能正确进行四舍五入:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值