项目场景:
网上商城下单的价格保留两位小数造成的血案
问题描述:
客户下单失败,差1分钱。
原因分析:
订单金额格式化为两位小数,结算页显示订单总额2525.19元,然后客户提交订单失败,无法支付,无法通过后台校验。原因是订单应付总额应该是2525.20元,格式化的时候造成错误精度少了1分钱。
/**
* @param @param data
* @param @return 设定文件
* @return String 返回类型
* @throws
* @Title: to2Decimal
* @Description: 保留两位小数,不进行四舍五入
*/
public static String to2Decimals(double data) {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setGroupingSize(0);
df.setRoundingMode(RoundingMode.FLOOR);
String style = "0.00";// 定义要显示的数字的格式
df.applyPattern(style);
return df.format(data);
}
原来的格式化方法有问题,问题代码如下
df.setMaximumFractionDigits(2);
df.setGroupingSize(0);
df.setRoundingMode(RoundingMode.FLOOR);
解决方案:
使用以下方法格式化两位小数就没问题了。
/**
* @Description: 保留两位小数
*/
public static String to2Decimal(double data) {
DecimalFormat df = new DecimalFormat();
String style = "0.00";// 定义要显示的数字的格式
df.applyPattern(style);
return df.format(data);
}