文档章节

解决Double类型的金额字段中使用保留两位小数并四舍五入的问题

风格若干
 风格若干
发布于 2017/08/28 11:54
字数 397
阅读 56
收藏 0

一、涉及到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));
    }

 

© 著作权归作者所有

共有 人打赏支持
风格若干
粉丝 6
博文 87
码字总数 53598
作品 0
西安
程序员
私信 提问
java.math.BigDecimal保留两位小数,保留小数,精确位数

java保留两位小数问题: 方式一(四舍五入形式保留两位小数,注意模式ROUNDHALFUP): 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigD...

vshcxl
2016/10/27
2.2K
0
Android中关于保留小数点位数的处理

保留两位小数 方法一: 方式二: 例:new java.text.DecimalFormat(“#.00”).format(3.1415926) .00 表示两位小数 #.0000四位小数 以此类推… 方式三: %.2f %. 表示 小数点前任意位数 2 表...

天鬼
01/29
0
0
java保留两位小数

java保留两位小数问题: 方式一: 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigDecimal.ROUNDHALFUP).doubleValue(); 保留两位小数 ......

日拱一卒
2016/09/05
31
0
保留两位小数的写法

Math.round()最后返回的是一个整形数(显然此种方法可以排除了),当然我们可以用这个方法间接实现保留两位小数的方法比如Math.round(34899/10d)/100d NumberFormat的setMaximumFractionDigits和...

fantasiter
2016/07/01
40
0
金额的计算BigDecimal类

金额的计算BigDecimal类 double d = 9.84; double d2 = 1.22; //注意需要使用BigDecimal(String val)构造方法 BigDecimal bigDecimal = new BigDecimal(Double.toString(d)); BigDecimal big......

Big_BoBo
2013/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
14
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
22
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
27
0
MYSQL索引

索引的作用 索引类似书籍目录,查找数据,先查找目录,定位页码 性能影响 索引能大大减少查询数据时需要扫描的数据量,提高查询速度, 避免排序和使用临时表 将随机I/O变顺序I/O 降低写速度,占用磁...

关元
昨天
13
0
撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
昨天
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部