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 模式才能正确进行四舍五入: