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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tc4892998 中级黑马   /  2014-5-6 21:31  /  1483 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我是一名JAVA新手.今天我在学INT,FLOAT,DOUBLE这些变量类型.
但是发现了个事儿,代码如下:
class Sum01
{
        public static void main(String[] args)
        {
                double a=1.222;
                int b=3;
                double c=a+b;
                System.out.println("c="+c);

        }

}


期望的结果为c=4.222,但是在CMD里运行的结果为c=4.22200002861023.
请教各位高手,这是为什么?

6 个回复

倒序浏览
因为Java里你直接写出来的小数都是double的,占八个字节,如果你想让他是float的,必须在小数后面加个f也就是1.222f。浮点数在内存中存储的都是一个近似值,他的存储方式是第一位为符号位,2-11位是指数位,后面的才是尾数部分,你这个是int与double相加,int会被提升,后面加一堆0,也不一定是0,什么都有,就是近似值,所以结果会是那么长
回复 使用道具 举报
我知道原因,但是我也不知道该怎么回答你。给你一个网址吧:http://www.cnblogs.com/fromchaos/archive/2010/12/07/1898698.html
回复 使用道具 举报
  1. public class Sum1 {

  2.                 public static void main(String[] args)
  3.                 {
  4.                         double a=1.222;
  5.                         int b=3;
  6.                         double c=a+b;
  7.                         System.out.printf("%.3f",c);

  8.                 }

  9.         }
复制代码
回复 使用道具 举报

你这段代码是控制输出位数吧?
回复 使用道具 举报
曹冬明 发表于 2014-5-6 22:08
因为Java里你直接写出来的小数都是double的,占八个字节,如果你想让他是float的,必须在小数后面加个f也就 ...

谢谢.这就类似于EXCEL里的通过计算获得的数值,如果复制到别的地方,仅复制数值,其后也有很多小数的原理一样吧?
回复 使用道具 举报
恩,就是的这样的奥。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马