// 在java中,使用double进行运算,有时会出现精度丢失的问题,值会有那么0.00000***1偏差的偏差,导致匹配校验常常出现问题 解决方案如下: //加,乘,除都正常,而且,只要不是这种类型的相减,其他减法也正常 //原因: //因为它的存储形式是二进制的10 进制转化成2进制进行运算可能会误差的,你也可以得到你想要的无精度损失的结果,前提是你将123写成1.23e+2, 123.12写成1.2312e+2双精度形式, //否则从正整型123转化为双精度过程中就可能丢失那么一点精度,因为有限长度的寄存器位仍然无法表示无穷小的精度的。 /** * 对double数据进行取精度. * @param value double数据. * @param scale 精度位数(保留的小数位数). * @param roundingMode 精度取值方式. * @return 精度计算后的数据. */ public static double round(double value, int scale,int roundingMode) { BigDecimal bd = new BigDecimal(value); bd = bd.setScale(scale, roundingMode); double d = bd.doubleValue(); bd = null; return d; } /** * double 相加 * @param d1 * @param d2 * @return */ public double sum(double d1,double d2){ BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.add(bd2).doubleValue(); } /** * double 相减 * @param d1 * @param d2 * @return */ public double sub(double d1,double d2){ BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.subtract(bd2).doubleValue(); } /** * double 乘法 * @param d1 * @param d2 * @return */ public double mul(double d1,double d2){ BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.multiply(bd2).doubleValue(); } /** * double 除法 * @param d1 * @param d2 * @param scale 四舍五入 小数点位数 * @return */ public double div(double d1,double d2,int scale){ // 当然在此之前,你要判断分母是否为0, // 为0你可以根据实际需求做相应的处理 BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.divide (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); } //这样,计算double类型的数据计算问题就可以处理了。另外补充一下JavaScript四舍五入的方法:小数点问题 /* Math.round(totalAmount*100)/100;//(保留2位) function formatFloat(src,pos){ returnMath.round(src*Math.pow(10,pos))/Math.pow(10,pos); }*/
相关推荐
一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; import java.math.BigDecimal; import java.text....
为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。 所有的包装类都是抽象类 Number 的子类。 包装类 基本数据类型 Boolean boolean Byte byte Short short Integer int Long long Character ...
每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;本书实例来源...
解决方案: 1)采用对象序列化和反序列化技术。 2)将全部账户信息采用对象序列化的方式存放在文件中。 提示: 1) 使用文件来保存各种账户的信息,将注册、存款、取款、转账、修改之后的信息要及时的保存到文件中...
实习轻松技能包含Discord的Easy Skill Up Server解决方案套装-1 编写一个Java程序在屏幕上打印一个int,一个double和一个char。 编写程序以分别打印边长为2和3单位的矩形区域。 编写程序以打印数字8.2和6的乘积。 ...
2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的...
2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的...