关于比较CompareTo的用法

CompareTo的比较原理:

      先读取出字符串的第一个“字母”进行比较,比较的方法是ascii码表的值(字符所对应的十进制值),如果前面的大那么返回1,后面的大返回-1;此位置相同,继续比较下一位,直到最后一位,如果都相同的话,就返回0;


   

例如:

int cc= "13".compareTo("12");
System.out.println(cc);
int dd= "11".compareTo("12");
System.out.println(cc);
int dd= "aaa".compareTo("aaa");
System.out.println(cc);
结果就是:1(换行) -1(换行)0。


运用:

  在做资金拆分的时候要校验拆分, 就是通比较两个 输入的金额和主表的余额(需要拆分的金额), 通过返回结果(0或者-1)到前台页面,当然这个也是通过ajax请求来做的。

// 拆分金额校验
	@ResponseBody
	@RequestMapping("/checkAmt")
	public int checkAmt(Double amt, Long detailId, Long fundsDirection) {
		ReconFundsDetailForQuery query = new ReconFundsDetailForQuery();
		query.setId(detailId);
		List<ReconFundsDetailDto> dto_l = reconFundsDetailService.query(query);
		ReconFundsDetailDto dto = dto_l.get(0);
		Long fundsAmtIn = dto.getFundsAmtIn() != null ? dto.getFundsAmtIn() : LONG_ZERO;// 入金
		Long fundsAmtOut = dto.getFundsAmtOut() != null ? dto.getFundsAmtOut() : LONG_ZERO;// 出金
		BigDecimal bigAmt = new BigDecimal(String.valueOf(amt));// 拆分金额
		Map<String, Object> paramMap = new HashMap<String, Object>();
		List<Long> aprrovalStatus = new ArrayList<Long>();
		aprrovalStatus.add(AprrovalStatus.COMMITED.getKey());
		aprrovalStatus.add(AprrovalStatus.SYNCHRONIZED.getKey());
		paramMap.put("aprrovalStatus", aprrovalStatus);
		paramMap.put("parentFundsId", detailId);
		Long commitedAmt = LONG_ZERO;
		Long CommitedTotalAmt = reconFundsDetailTmpService.queryCommitedTotalAmt(paramMap); // 大于0入金多,小于0出金多
		if (CommitedTotalAmt != null) {
			commitedAmt = CommitedTotalAmt;
		}
		if (fundsAmtIn.longValue() != LONG_ZERO && fundsAmtOut.longValue() == LONG_ZERO) {// 明细表入金类型
			if (fundsDirection == FundDirection.IN.getKey()) {// 用户选择是入金
				BigDecimal balance = NumberUtils.longToBigDecimal(fundsAmtIn - commitedAmt);
				if (balance.compareTo(bigAmt) == -1) {
					return -1;
				}
			}
		}
		if (fundsAmtIn.longValue() == LONG_ZERO && fundsAmtOut.longValue() != LONG_ZERO) {// 明细表出金类型
			if (fundsDirection == FundDirection.OUT.getKey()) {// 用户选择是出金
				BigDecimal balance = NumberUtils.longToBigDecimal(fundsAmtOut + commitedAmt);
				if (balance.compareTo(bigAmt) == -1) {
					return -1;
				}
			}
		}
		if (fundsAmtIn.longValue() == LONG_ZERO && fundsAmtOut.longValue() == LONG_ZERO) {
			return -1;
		}
		return 0;
	}











  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值