字符串数字分转元(汇率数字字符串处理)、JPA 使用原生SQL语句更新

88 篇文章 3 订阅

字符串数字分转元

 public String convertCent2Yuan(String money) {
    if (!checkCentMoney(money)) {
        throw new CommonException("{}分转元错误,非法字符串!", money);
    }        
    return BigDecimalUtil.divide(new BigDecimal(money), new BigDecimal("100"), 2).toPlainString();
}

public boolean checkCentMoney(String value) {
    // 判断字符串是否是正数(钱)
    if (StringUtils.isNotEmpty(value)) {
        return value.matches("^([1-9][0-9]*)");
    }
    return false;
}

BigDecimalUtil简单封装了BigDecimal.java类中的devide方法!

汇率(保留几位小数,scale就填几)


    public String convertCent2Yuan(String numStr, int scale) {
        if (!checkCentMoney(numStr)) {
            throw new CommonException("{}错误,非数字字符串!", numStr);
        }
        return BigDecimalUtil.divide(new BigDecimal(numStr), new BigDecimal("1" + serialZero(scale)), scale).toPlainString();
    }
    
    private String serialZero(int scale) {
        StringBuilder ret = new StringBuilder();
        for (int i = 0; i < scale; i++) {
            ret.append("0");
        }
        return ret.toString();
    }

JPA 使用原生SQL语句更新

@Modifying
@Query(value = "update TB_SYS_USER set frozen2 = frozen2 + #{frozen2} where id = #{id} and #{frozen2} >= 0", nativeQuery = true)
int update(@Param("id") Long id, @Param("frozen2") BigDecimal frozen2);

对象内部属性连续处理,注意幂等性(做两次减法操作,很危险)

@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class AvailableVO {
    @ApiModelProperty("可用餘額")
    private String available;
    @ApiModelProperty("餘額有效截止日期,格式yyyyMMdd")
    private String permitEnd;
    @ApiModelProperty("币种")
    private String currency;
    @ApiModelProperty("狀態,-1 暫停服務 0 未激活 1 正常")
    private Integer status;
}    
    
    
public static void main(String[] args) {
   AvailableVO ret = new AvailableVO ();
   ret.setAvailable("220.20");
   BigDecimal needSub = new BigDecimal("800");
   ret.setAvailable(BigDecimalUtil.subtract(new BigDecimal(ret.getAvailable()), needSub == null ? new BigDecimal("0.00") : needSub, 2).toPlainString());
        System.err.println(ret.setAvailable(BigDecimalUtil.subtract(new BigDecimal(ret.getAvailable()), needSub == null ? new BigDecimal("0.00") : needSub, 2).toPlainString()));
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值