发生精度丢失的原因:

个人理解:机器在运行时,使用2进制形式的计数方式,而我们日常生活中的计算是10进制的,对于整数的加减乘除,double还能适用,但是对于有小数的,则容易发生精度丢失,即用2进制表示10进制小数时,部分小数只是近似的表示,2进制表示不完全准确,此时,只能用BigDecimal来进行精确的精度计算。

double  d1=5.0;

double d2=4.9;

BigDeciaml b1=new BigDeciaml(d1);

BigDecimal b2=new BigDecimal(d2);

加法运算:

double sum=b1.add(b2).doubleValue();

减法运算:

double  sub=b1.subtract(b2).doubleValue();

乘法运算:

double   mul=b1.multiply(b2).doubleValue();

除法运算:

//scale表示指定保留几位小数,若发生除不尽的情况,则按四舍五入来保留小数

double   div=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

只保留小数位数的两种方法:

1)double num1=b1.divide(1,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

2)BigDecimal bg=new BigDecimal(d1);

double num2=bg.setScale(scale,BigDecimal.ROUND_HALF_UP).douleValue();

3)DecimalFormat bg=new DecimalFormat("###0.00");

double num3=bg.format(d1);

4)String num4=String.format("%.2f",d1);//与C语言的打印输出类似

String num5=String.format("%.2f,%.3f,%.3f",d1,d1,d3);

注意:doubleValue()  将此BigDecimal 转换为 double

double发生精度丢失的解决办法的更多相关文章

  1. Source InSight context 窗口丢失的解决办法

    我没关si的情况下强制关机导致的 Source InSight context 窗口丢失的解决办法 (2010-09-03 13:35:45) 转载▼     今天早晨改改CLI,上了趟WC,回来发现 ...

  2. Asp.Net保存session的三种方法 (Dll文件更新导致session丢失的解决办法)

    1. InProc模式(默认值):asp.net将session保存到当前进程中,这种方式最快,但是不能多台服务器共享session,且会话状态数据容易丢失. <sessionState mod ...

  3. 在IE浏览器中iframe跨域访问cookie/session丢失的解决办法

    单点登录需要在需要进入的子系统B中添加一个类,用于接收A系统传过来的参数: @Action(value = "outerLogin", results = { @Result(na ...

  4. float,double等精度丢失问题 float,double内存表示

    问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 来自MSDN的解释: http://msdn.microsoft.com/zh-cn/c151dt3s. ...

  5. Java:利用BigDecimal类巧妙处理Double类型精度丢失

    目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数? 如何用BigDecimal解决double精度问题? new BigDecimal(doub ...

  6. Session丢失的解决办法小结

    最近在做ASP.NET项目时,测试网站老是取不出Session中的值,在网上搜索了一下,找到一些解决方法,记录在这里.最后使用存储在StateServer中的办法解决了问题. SessionState ...

  7. GDI+中发生一般性错误的解决办法

    这个错误经常发生,代码如下: private  static  byte[] GetBytes (Image image) { try { if (image == null) return null ...

  8. GDI+中发生一般性错误的解决办法(转帖)

    今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现“GDI+中发生一般性错误”的异常.于是开始“ ...

  9. WAMPServer安装关于MSVCR110.dll丢失的解决办法

    安装完成后出现如下提示: 解决办法 请参阅:计算机中丢失 msvcr110.dll 怎么办 为了防止原地址失效,下面简单说下原地址的内容: 到  http://www.microsoft.com/zh ...

随机推荐

  1. C系列语言终极校对宝典【第一、第二部分】

    第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...

  2. JSP复习笔记

    1.注释 <!--这个注释会显示在HTML源码中--> <%--隐藏注释,不会显示在HTML源码中--%> 2.声明 <%! java声明 声明变量,方法等 %> ...

  3. storage engine option for directoryPerDB

    Requested option conflicts with current storage engine option for directoryPerDB; you requested true ...

  4. Mongoose Embedded Web Server Library

    https://github.com/cesanta/mongoose http://ltp.ai/docs/ltpserver.html LTP Server在轻量级服务器程序mongoose基础上 ...

  5. Immutable学习及 React 中的实践

    为什么用immutable.js呢.有了immutable.js可以大大提升react的性能. JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原 ...

  6. JSP 使用 JDBC连接SQL Server

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 静态代理、动态代理和cglib代理

    转:https://www.cnblogs.com/cenyu/p/6289209.html 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处 ...

  8. (linux)container_of()宏

      在学习Linux驱动的过程中,遇到一个宏叫做container_of. 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**  * container_of - ...

  9. 字符串查找函数(BF)

    //模拟字符串定位函数 // s: abcbbghi // t: ghi // 返回6 #include <iostream> #include <string> #inclu ...

  10. 一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...