double 精度问题
来源:互联网 发布:阿尔法软件注册机 编辑:程序博客网 时间:2024/05/01 01:10
使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错。 所以一般对double类型进行运算时,做好对结果进行处理,然后拿这个值去做其他事情。
/** * 对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精度问题
- double,float精度问题
- Double 精度问题总结
- double 精度问题
- BigDecimal,Double精度问题
- double 精度问题
- cout double 精度问题
- double精度问题
- double,float精度问题
- ACM double精度问题
- double 的精度问题
- float double 精度问题
- Double的精度问题
- double运算精度问题
- double精度相关问题
- float 和 double 精度问题
- double 计算精度的问题
- Double与BigDecimal 精度问题
- Linux原子操作的分析
- P面试题
- 网线接法:详细的网线制作
- 页面上获得Flash的对象的方法,官方版本
- 进入孕期第36周
- double 精度问题
- VC++动态链接库(DLL)编程深入浅出(zz)
- Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
- 安装Ubuntu11.10-desktop 40G硬盘分区
- linux下ls命令可选项详解
- IIS日志分析方法及工具
- [转载] objective-c基础教程——学习小结
- Linux进程间通信机制
- 在非VS环境下C++ Builder,Delphi,VC,VB等调用C#开发的DLL的完整方法