BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数位 |转String|科学计数法

  • Post author:
  • Post category:其他




BigDecimal 加减乘除 | 比较大小 | 取最大最小值 | 保留小数



一、加减乘除

BigDecimal num1 = new BigDecimal(2);
BigDecimal num2 = new BigDecimal(6);
BigDecimal num3 = null;

--2+6 
num3 =  num1.add(num2); 	 
-- 结果:8

--6-2
num3 = num2.subtract(num1);
-- 结果:4

--2*6
num3 = num1.multiply(num2);
-- 结果:12

--6/2
num3 = num2.divide(num1);
-- 结果:3



二、比较大小


这里比较的时候不能直接 num4.compareTo(new BigDecimal(1)) == 1 或者 -1,只能num4.compareTo(new BigDecimal(1)) > 0或 < 0 或 “= = 0”,不能直接判断1或-1

BigDecimal num4 = new BigDecimal(0);
BigDecimal num5 = new BigDecimal(1);
BigDecimal num6 = new BigDecimal(2);
		
-- 小于 0<1
int i = num4.compareTo(new BigDecimal(1));	-- 结果:-1

-- 等于 1=1
i = num5.compareTo(new BigDecimal(1))	-- 结果:0

-- 大于 2>1
i = num6.compareTo(new BigDecimal(1))	-- 结果:1

-- 常用一步到位进行判断:
if(num4.compareTo(new BigDecimal(1)) > 0){
	return true;
}



三、取最大最小值

BigDecimal num7 = new BigDecimal(11);
BigDecimal num8 = new BigDecimal(22);

-- 比较两个数的大小,返回小的数
System.out.println(num7.min(num8));
-- 结果:11

-- 比较两个数的大小,返回大的数
System.out.println(num7.max(num8));
-- 结果:22



四、保留小数

-- 注意这里new Bigdecimal不能直接使用floatdouble类型

BigDecimal num9 = new BigDecimal("3.14559");
BigDecimal num10 = null;

-- 表示直接去掉多余的位数,不进行四舍五入
num10 = num9.setScale(2, BigDecimal.ROUND_DOWN);
System.out.println(num10);
-- 结果:3.14

-- 表示进位处理,即四舍五入
num10 = num9.setScale(2, BigDecimal.ROUND_UP);
System.out.println(num10);
-- 结果:3.15



五、遇到的坑,有小数位的精度问题


new 新的对象的时候整数可以直接这样:new BigDecimal(10);但是带小数的会有精度损失,比如:new BigDecimal(10.13456),所以带小数的要使用字符串进行处理:new BigDecimal(“10.13456”)。



六、转String

https://www.cnblogs.com/heqiyoujing/p/10409965.html

public static void main(String[] args) {
        // 浮点数的打印
        System.out.println(new BigDecimal("10000000000").toString());

        // 普通的数字字符串
        System.out.println(new BigDecimal("100.000").toString());

        // 去除末尾多余的0
        System.out.println(new BigDecimal("100.000").stripTrailingZeros().toString());

        // 避免输出科学计数法
        System.out.println(new BigDecimal("100.000").stripTrailingZeros().toPlainString());

    }

运行结果:

10000000000
100.000
1E+2
100


科学计数法问题


可能存在问题使用法:

bigDecimal.setScale(2, BigDecimal.ROUND_UP).stripTrailingZeros().toPlainString()

不确定建议

先得到bigDecimal的setScale

后另外String=bigDecimal…stripTrailingZeros().toPlainString()



七、取反

negate()



八、取绝对值

java.math.BigDecimal.abs()返回一个BigDecimal,其值是此BigDecimal的绝对值