A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z1342802487 中级黑马   /  2014-4-4 21:19  /  1065 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 z1342802487 于 2014-4-6 08:30 编辑
  1. public class Doubledemo
  2. {
  3.   public static void main(String[] args)
  4.    {
  5.     double a = 2.01;
  6.     double b = 3.02;
  7.     double d = 5.03;
  8.     boolean c = (a+b)==d;
  9.     System.out.println("a+b="+(a+b));
  10.     System.out.println("d==(a+b)"+c);
  11.    }
  12. }
复制代码

会输出经下结果
a+b=5.029999999999999
d=5.03
d==(a+b)false
怎么会这样?怎么才能实现浮点数的高精度计算呢?

1 个回复

倒序浏览
浮点数(小数): double

1) double 是64位浮点数
2) 浮点数计算是不绝对精确的,有舍入误差
   //所以double型的a+b=5.029999999999999(有舍入)
3)  D、d是double后缀

  /*a+b=5.029999999999999
   *d=5.03!= 5.029999999999999 所以比较的结果会是false  
   */

想要得到精度值用java.math.BigDecimal类:
BigDecimal用于描述一个大浮点数
描述的数字精度由内存上限决定

1)创建BigDecimal类 实例对象的方法有两种
  a. BigDecimal d1=new BigDecimal("3.0");
  b. BigDecimal d2=BigDecimal.valueOf(2.5);

2)BigDecimal有subtract,add,multiply,divide等方法
对于divide方法,通常要制定精度和舍入模式,否则当遇到无限小数时,
除法会一直进行下去直到抛出异常

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马