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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jackhai9 中级黑马   /  2014-8-11 22:00  /  2357 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void main(String[] args){

  2.         System.out.println(0.4 + 0.8); // = 1.2 ?
  3.         System.out.println(2 - 1.1);      // = 0.9 ?
  4.         System.out.println(0.2 * 3);  // = 0.6 ?
  5.         System.out.println(1.2 / 3); // = 0.4 ?

  6.     }
复制代码


点评

浮点误差  发表于 2014-8-11 23:04

13 个回复

倒序浏览
小数默认  是  double类型的
回复 使用道具 举报
刘馥祎 发表于 2014-8-11 22:04
小数默认  是  double类型的

那这个呢?
  1. public static void main(String[] args){

  2.         System.out.println(0.4 + 0.9);
  3.         System.out.println(2 - 1.0);
  4.         System.out.println(0.2 * 4);
  5.         System.out.println(1.2 / 4);

  6.     }
复制代码
回复 使用道具 举报
同样疑问中。。。求告知。。。。。。。…………
回复 使用道具 举报
真的耶, 为什么两端代码运行结果不同额。。。
回复 使用道具 举报
本帖最后由 790324255a 于 2014-8-12 00:21 编辑

修正:浮点数是不能准确表示的,它有精度损失,所以出现这种情况用BigDecimal来进行运算,构造方法不能传入double类型 需将 Double.toString(double值) 调用其运算方法运算 楼主也早就明白解决方法
回复 使用道具 举报
790324255a 发表于 2014-8-11 23:06
楼主的意思是想问为什么是double类型吗 如果是 int 跟double类型运行 int类型会自动提升为double类型 doubl ...

那这个呢?
  1. public static void main(String[] args){

  2.         System.out.println(0.4 + 0.9);
  3.         System.out.println(2 - 1.0);
  4.         System.out.println(0.2 * 4);
  5.         System.out.println(1.2 / 4);

  6.     }
复制代码
回复 使用道具 举报
本帖最后由 790324255a 于 2014-8-12 00:05 编辑

这个问题值得探讨
回复 使用道具 举报
LZ 赶快公布答案吧 我知道你有
回复 使用道具 举报
mr.yang 发表于 2014-8-11 23:20
LZ 赶快公布答案吧 我知道你有

我只知道并不是所有的浮点数都能够被精确的表示成一个double 类型值,因此它会被表示成与它最接近的 double 类型的值。所以0.4 + 0.8 ≠ 1.2 。……查API发现,得需要BigDecimal,bulabulabula。。。
回复 使用道具 举报
留印看答案
回复 使用道具 举报
D:\Java\java2014>java Heima
1.3
1.0
0.8
0.3

D:\Java\java2014>java Heima1
1.2000000000000002
0.8999999999999999
0.6000000000000001
0.39999999999999997

很奇怪为什么会这样
回复 使用道具 举报
这个是数据类型的自动提升,byte提升为short,short和char提升为int,int提升为long,long提升为float,float提升为double
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马