博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Double类型的金额字段中使用保留两位小数并四舍五入的问题
阅读量:6477 次
发布时间:2019-06-23

本文共 1791 字,大约阅读时间需要 5 分钟。

  hot3.png

一、涉及到js计算的精度问题,toFixed(2)在js中,会出现如下情况:

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));    }

 

转载于:https://my.oschina.net/miwang/blog/1524855

你可能感兴趣的文章
能力不是仅靠原始积累(三)
查看>>
实战:使用终端服务网关访问终端服务
查看>>
彻底学会使用epoll(一)——ET模式实现分析
查看>>
路由器的密码恢复
查看>>
【Android 基础】Android中全屏或者取消标题栏
查看>>
Xilinx 常用模块汇总(verilog)【03】
查看>>
脱离标准文档流(2)---定位
查看>>
IO流之字符流
查看>>
集合异常之List接口
查看>>
Softmax回归
查看>>
紫书 习题11-11 UVa 1644 (并查集)
查看>>
App工程结构搭建:几种常见Android代码架构分析
查看>>
使用openssl进行证书格式转换
查看>>
ZOJ 3777 Problem Arrangement
查看>>
虚拟机类加载机制
查看>>
Callable和Future
查看>>
installshield12如何改变默认安装目录
查看>>
少用数字来作为参数标识含义
查看>>
ScrollView中嵌套ListView
查看>>
JAVA虚拟机05--面试必问之JVM原理
查看>>