admin管理员组文章数量:1027454
支付服务中对支付金额支持小数的金额处理
支付的支付服务,支付金额带小数点的情况处理,不要强制转换为int,否则不支持支付金额小数 导致记录的金额不准确,同时在支付网关接收到mq消息效验金额是否一致,不通过。
支付宝 settleAmount = amountRefund.replace(".", ""); //将小数点替换,则统一转换为百分制,单位为分 微信 settleAmount = wxPayResData.getTotal_fee() ; //订单总金额,单位为分 ,所以此处不需要添加 + "00";
代码语言:javascript代码运行次数:0运行复制/**
* 金额转换
*/
Double transAmt = 0d; //真实支付金额,去掉小数点2位
// Integer transAmtTmp = 0;
String total_freeze_credit_amount = "0"; //信用金额
String total_freeze_fund_amount = ""; //资金金额
try {
// 容错处理
// transAmtTmp = Integer.valueOf(settleAmount) / 100;
// settleAmount = String.valueOf(transAmtTmp);
BigDecimal realTransAmt = BigDecimalUtils.getRealTransAmt(settleAmount);
transAmt = realTransAmt.doubleValue();
settleAmount = String.valueOf(transAmt);
if(StringUtils.isBlank(total_freeze_fund_amount)) {
total_freeze_fund_amount = String.valueOf(transAmt);//设置默认值 冻结资金账户
}
} catch (Exception e) {
logger.error("settleAmount < 0的转换,仅仅针对测试金额。",e);
}
代码语言:javascript代码运行次数:0运行复制import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalUtils {
/**
* 银联,applepay,微信,金额单位为分 保留2位小数点
* @param amt
* @return
*/
public static BigDecimal getIntegerTransAmt(String amt){
/**
* 保留2位小数
*/
BigDecimal setScale2 = getDoubleTransAmt(amt);
BigDecimal multiplicand = new BigDecimal("100"); //乘以100
/**
* 乘以100
*/
BigDecimal bignumresult = setScale2.multiply(multiplicand);
//精确到分
return bignumresult;
}
public static BigDecimal getRealTransAmt(String amt){
/**
* 保留2位小数
*/
BigDecimal setScale2 = getDoubleTransAmt(amt);
BigDecimal multiplicand = new BigDecimal("100"); //乘以100
/**
* 除以100
*/
BigDecimal bignumresult = setScale2.divide(multiplicand,2,RoundingMode.HALF_UP);
//精确到分
return bignumresult;
}
/**
* 快钱,连连支付,支付宝 单位 元
* @param amt
* @return
*/
public static BigDecimal getDoubleTransAmt(String amt){
BigDecimal decimal = new BigDecimal(amt);
BigDecimal setScale2 = decimal.setScale(2,BigDecimal.ROUND_HALF_UP); //四舍五入
return setScale2;
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除微信bigdecimal测试服务网关支付服务中对支付金额支持小数的金额处理
支付的支付服务,支付金额带小数点的情况处理,不要强制转换为int,否则不支持支付金额小数 导致记录的金额不准确,同时在支付网关接收到mq消息效验金额是否一致,不通过。
支付宝 settleAmount = amountRefund.replace(".", ""); //将小数点替换,则统一转换为百分制,单位为分 微信 settleAmount = wxPayResData.getTotal_fee() ; //订单总金额,单位为分 ,所以此处不需要添加 + "00";
代码语言:javascript代码运行次数:0运行复制/**
* 金额转换
*/
Double transAmt = 0d; //真实支付金额,去掉小数点2位
// Integer transAmtTmp = 0;
String total_freeze_credit_amount = "0"; //信用金额
String total_freeze_fund_amount = ""; //资金金额
try {
// 容错处理
// transAmtTmp = Integer.valueOf(settleAmount) / 100;
// settleAmount = String.valueOf(transAmtTmp);
BigDecimal realTransAmt = BigDecimalUtils.getRealTransAmt(settleAmount);
transAmt = realTransAmt.doubleValue();
settleAmount = String.valueOf(transAmt);
if(StringUtils.isBlank(total_freeze_fund_amount)) {
total_freeze_fund_amount = String.valueOf(transAmt);//设置默认值 冻结资金账户
}
} catch (Exception e) {
logger.error("settleAmount < 0的转换,仅仅针对测试金额。",e);
}
代码语言:javascript代码运行次数:0运行复制import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalUtils {
/**
* 银联,applepay,微信,金额单位为分 保留2位小数点
* @param amt
* @return
*/
public static BigDecimal getIntegerTransAmt(String amt){
/**
* 保留2位小数
*/
BigDecimal setScale2 = getDoubleTransAmt(amt);
BigDecimal multiplicand = new BigDecimal("100"); //乘以100
/**
* 乘以100
*/
BigDecimal bignumresult = setScale2.multiply(multiplicand);
//精确到分
return bignumresult;
}
public static BigDecimal getRealTransAmt(String amt){
/**
* 保留2位小数
*/
BigDecimal setScale2 = getDoubleTransAmt(amt);
BigDecimal multiplicand = new BigDecimal("100"); //乘以100
/**
* 除以100
*/
BigDecimal bignumresult = setScale2.divide(multiplicand,2,RoundingMode.HALF_UP);
//精确到分
return bignumresult;
}
/**
* 快钱,连连支付,支付宝 单位 元
* @param amt
* @return
*/
public static BigDecimal getDoubleTransAmt(String amt){
BigDecimal decimal = new BigDecimal(amt);
BigDecimal setScale2 = decimal.setScale(2,BigDecimal.ROUND_HALF_UP); //四舍五入
return setScale2;
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-05-04,如有侵权请联系 cloudcommunity@tencent 删除微信bigdecimal测试服务网关本文标签: 支付服务中对支付金额支持小数的金额处理
版权声明:本文标题:支付服务中对支付金额支持小数的金额处理 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1747396937a2163314.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论