文档章节

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

风格若干
 风格若干
发布于 2017/08/28 11:54
字数 397
阅读 37
收藏 0
点赞 0
评论 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
博文 79
码字总数 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 ⋅ 0

Android中关于保留小数点位数的处理

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

天鬼 ⋅ 01/29 ⋅ 0

java保留两位小数

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

日拱一卒 ⋅ 2016/09/05 ⋅ 0

保留两位小数的写法

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

fantasiter ⋅ 2016/07/01 ⋅ 0

bigdecimal的相关函数

保留两位小数{ 方法一:{ double c=3.154215; java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00"); String str = myformat.format(c); } 方式二:{ java.text.DecimalFo......

stephen_wu ⋅ 2016/08/19 ⋅ 0

Double类型的运算精度问题

在Java中简单浮点数类型float和double不能进行运算,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。对于货币精度已知的情况,可以使用整型。 ...

有资本再款 ⋅ 2016/12/03 ⋅ 0

常用API(二)

System System类用于描述系统一些信息,该类中的方法和属性都是静态的。 out:标准输出流,默认对应的设备是显示器。 in:标准输入流,默认的设备是键盘。 因为Properties是HashTable的子类,...

yerenyuan_pku ⋅ 2017/10/13 ⋅ 0

金额的计算BigDecimal类

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

BuWStudio ⋅ 2013/10/29 ⋅ 0

mysql小数数据类型

对于小数的表示,mysql分为浮点型和定点型两种。浮点行为FLOAT和DOUBLE,定点型只有DECIMAL。定点型在数据库中以字符串的形式存放,因此更为精确,一般表示货币等比较精确的数据。 他们都可以...

JettyWag ⋅ 2016/11/13 ⋅ 0

Java中浮点型数据Float和Double进行精确计算的问题

一、浮点计算中发生精度丢失 大概很多有编程经验的朋友都对这个问题不陌生了:无论你使用的是什么编程语言,在使用浮点型数据进行精确计算时,你都有可能遇到计算结果出错的情况。来看下面的...

Junn ⋅ 2013/06/10 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 8分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 16分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 29分钟前 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 39分钟前 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 53分钟前 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 58分钟前 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

zabbix 3.4安装

#已装好lamp环境 1.安装相关yum仓库 rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm #tip:rpm -ql zabbix-release 看上面这个软件装了哪些东......

山月关 ⋅ 今天 ⋅ 0

Java的Excel导出工具类

首先在POM中引入需要的Jar <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>o......

Kxvz ⋅ 今天 ⋅ 0

springboot 使用jsp

目录结构: 启动文件的Application必须在contorller文件的父级 文件路径在src/main/webapp下面 我的配置:前缀是/WEB-INF/jsp/ pom.xml需要加入tomcat-embed-jasper, 对jsp的支持的依赖 <de...

夜醒者 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部