java的double的精度问题
来源:互联网 发布:淘宝买处方药是真的吗 编辑:程序博客网 时间:2024/06/11 09:42
在java中,使用double进行运算,有时会出现精度丢失的问题,值会有那么0.00000***1偏差的偏差,导致匹配校验常常出现问题
解决方案如下:
/**
* 对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)
{
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}
- double 的精度问题
- Double的精度问题
- java的double的精度问题
- java的double的精度问题
- java的double的精度问题
- Java中double的精度问题
- java 中double的精度问题
- Java基础-double的精度问题
- java中float,double的精度问题
- double 计算精度的问题
- double丢失精度的问题
- java中Double类型的运算精度丢失的问题
- Java的double的精度问题以及解决方案
- Java double的精度问题-BigDecimal的用法
- 关于java中Double类型的运算精度问题
- 关于java中Double类型的运算精度问题
- Java中运算精度的问题(double与BigDecimal)
- 关于java中Double类型的运算精度问题
- 静态语言和动态语言,静态编程语言和动态编程语言
- Visual Assist X_ refactor功能初探[原]
- VLOOKUP 怎么使用(摘)
- BigDecimal常用方法
- 单例模式的懒汉式和饿汉式
- java的double的精度问题
- Apple: iPad/iPhone OS 3.2停止更新IP问题
- 夜里的天空 是蓝色的吗?
- 解压版/免安装版MySQL配置全解
- verilog难发现的错误
- boost::bind入门函数
- SO参数
- VLOOKUP 怎么使用(摘)
- 关于VLOOKUP函数的用法