Java中存储金额的数据类型-BigDecimal

文章介绍了在Java中使用BigDecimal处理精确金额的必要性,包括在数据库中使用decimal类型存储,保证精度。示例展示了BigDecimal的加减乘除运算,并用compareTo方法比较大小。还讨论了如何使用setScale方法进行四舍五入操作,以及不同的舍入规则。
摘要由CSDN通过智能技术生成

在程序中存储金额的数据类型用:java.math.BigDecimal,

在数据库中存储金额的数据类型用:decimal

金额必须是完全精确的计算,故不能使用double或者float。 

长度可以自定义,如10,小数点在项目中用的是2,保留2位小数。

此外还要注意的就是默认值,一定写成0.00,不要用默认的NULL,否则在进行加减排序等操作时,会带来转换的麻烦。

SQL: 'amount' DECIMAL(10, 2) DEFAULT 0.00 NOT NULL COMMENT '金额',

2.加减乘除 

public static void main(String[] args){
    BigDecimal x = new BigDecimal("1.3");
    BigDecimal y = new BigDecimal("2.5");
	// 加法 --> 3.8
	BigDecimal add = x.add(y);
	System.out.println(add);
	// 减法 --> -1.2
	BigDecimal subtract = x.subtract(y);
	System.out.println(subtract);
	// 乘法 --> 3.25
	BigDecimal multiply = x.multiply(y);
	System.out.println(multiply);
	// 除法 --> 0.5  ,RoundingMode.HALF_UP 四舍五入
	BigDecimal divide = x.divide(y, RoundingMode.HALF_UP);
	System.out.println(divide);
}

3. 大小比较

两个BigDecimal值比较使用compareTo方法,比较结果有-1,0,1,分别表示小于, 等于, 大于

对于0,使用BigDecimal.ZERO表示

BigDecimal num = new BigDecimal("-3");
if (num.compareTo(BigDecimal.ZERO) == -1) {
	System.out.println("num 小于 0");
} else if  (num.compareTo(BigDecimal.ZERO) == 1) {
	System.out.println("num 大于 0");
} else if  (num.compareTo(BigDecimal.ZERO) == 0) {
	System.out.println("num 等于 0");
}

4. 小数位数及四舍五入规则

setScale方法的第一个参数是小数位数,这个示例是保留2位小数,后面是四舍五入规则

public static void main(String[] args){
    BigDecimal num = new BigDecimal("10.2621684798165165");
    System.out.println("原型 = " + num);
    System.out.println("直接删除多余的小数位 = " + num.setScale(2, BigDecimal.ROUND_DOWN));
    System.out.println("进位 = " + num.setScale(2, BigDecimal.ROUND_UP));
    System.out.println("四舍五入,碰到5位进位 = " + num.setScale(2, BigDecimal.ROUND_HALF_UP));
    System.out.println("四舍五入,碰到5位舍弃 = " + num.setScale(2, BigDecimal.ROUND_HALF_DOWN));
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值