解决Double类型的金额字段中使用保留两位小数并四舍五入的问题
2017-08-28 00:00
766 查看
一、涉及到js计算的精度问题,toFixed(2)在js中,会出现如下情况:
eg:var yanglaoFee = 76.925;
var shiyeFee = 76.935;
当执行toFixed(2)时,js会判断如果小数点后的第三位值为5,之后会判断小数点后第二位的值是否是偶数,偶数:不进位(计算结果为76.92);奇数:进位(计算结果为76.94)
为避免以上情况对金额计算的影响,将特殊情况进行单独处理,实现代码如下:
二、后台java代码在实现保留两位小数的操作时,常用:
DecimalFormat("#.00")也会出现小数点后第三位值为5时进位与否判断小数点后第二位奇偶的情况,处理代码如下:
eg:var yanglaoFee = 76.925;
var shiyeFee = 76.935;
当执行toFixed(2)时,js会判断如果小数点后的第三位值为5,之后会判断小数点后第二位的值是否是偶数,偶数:不进位(计算结果为76.92);奇数:进位(计算结果为76.94)
为避免以上情况对金额计算的影响,将特殊情况进行单独处理,实现代码如下:
//解决toFixed(precision)问题方法 function round(number, precision) { var str = number + ''; if (str.indexOf(".") == -1) { return number.toFixed(precision); } else { var len = str.length; var last = str.substr(len - 1, len); if (last == '5' && str.split(".")[1].length > precision) { last = '6'; str = str.substr(0, len - 1) + last; return (str - 0).toFixed(precision) } else { return number.toFixed(precision) } } }
二、后台java代码在实现保留两位小数的操作时,常用:
DecimalFormat df = new DecimalFormat("#.00"); Double yanglaoFee = Double.valueOf(df.format(val));
DecimalFormat("#.00")也会出现小数点后第三位值为5时进位与否判断小数点后第二位奇偶的情况,处理代码如下:
/** * * @Method: decimalCalculation * @Description: 小数计算(四舍五入):解决DecimalFormat("#.00")使用时小数点后第三位值为5,第二位为偶数时无法进位的问题 * @创建人:guozq * @创建时间:2017年8月24日 * @修改人: * @param * @param startVal * @return double */ public double decimalCalculation(Double startVal){ DecimalFormat df = new DecimalFormat("#.00"); String startStr = startVal.toString(); String startDecimal = startStr.split("\\.")[1]; Double jishu = 0.01; Double endVal = 0.0; if(startDecimal.length()>2 && "5".equals(String.valueOf(startDecimal.charAt(2))) && Integer.parseInt(String.valueOf(startDecimal.charAt(1)))%2==0){ endVal = Double.valueOf(startStr.substring(0, startStr.length()-1))+jishu; } else{ endVal = Double.valueOf(df.format(startVal)); } return Double.valueOf(df.format(endVal)); }
相关文章推荐
- Java实现金额大写,支持负数,不使用四舍五入的情况下保留两位小数
- 对double数据类型的数据保留两位小数,并且进行四舍五入
- java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法
- java中如何使Double类型的数值保留两位小数问题
- java中如何使Double类型的数值保留两位小数问题
- 保留两位小数:数据库字段类型NUMBER,Java字段类型Double类型
- java中如何使Double类型的数值保留两位小数问题
- JS保留四舍五入两小数(解决保留两位小数输入1.999变成1.100的问题)
- java中如何使Double类型的数值保留两位小数问题
- java double类型保留两位小数4种方法
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- double :数据类型保留两位小数,不足补0,满10进1
- java double 类型数据保留两位小数
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- double类型保留两位小数
- java如何使Double类型保留两位小数;
- C#中小数点后保留两位小数,四舍五入的函数及使用方法(转)
- 关于double类型保留小数的问题收藏
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- java如何使Double类型保留两位小数;