java教材上有个例题,是把double型的0.1234567812345678强制转换成float型,再输出!!结果是0.12345678。我想问一下java中不是规定%f输出小数点后只能留6位吗?还有就是float是分配4个字节,那到底关于其输出格式问题是如何规定的?请各位大吓详细点为在下(菜鸟)解答以下!!3Q!

解决方案 »

  1.   

    这个问题我在回复某个贴子时研究过.贴子找不到了.四个字节(31~0位)存放一个实数。分成三部分:
    1、最高的31位是符号位,我用s表示。
    2、接下来的30~23位共8位是2的幂次,这8位二进制是用移码和形式存贮的,移码就是把补码的符号符取反得到的。把移码看成无符号数,再减127就是实际要表示的数。这部分我用十进制的无符号数e来表示。
    3、接下来的22~0位共23位表示一个二进制的形如:1.xxxxxxxxxxxxxxxxxxxxxxx的小数,其中x共有23个x是0、1之一,也就是说,整数部分的1并不包含在23位中。这部分我用十进制的m表示。
    32位二进制如下:SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM.十进制的实数=(-1)^s*2^(e-127)*m.
    如果你写了一个float数,计算机会把这个float转为二进制,再移位为1.xxxxxxxxxxxxxxxxxxxxxxx的形式,把移位保存在e部分,把符号位保存在s部分,把23个x保存在m部分。
      

  2.   

    这个问题我在回复某个贴子时研究过.贴子找不到了. 四个字节(31~0位)存放一个实数。分成三部分: 
    1、最高的31位是符号位,我用s表示。 
    2、接下来的30~23位共8位是2的幂次,这8位二进制是用移码形式存贮的,移码就是把补码的符号取反得到的。把移码看成无符号数,再减127就是实际要表示的数。这部分我用十进制的无符号数e来表示。 
    3、接下来的22~0位共23位表示一个二进制的形如:1.xxxxxxxxxxxxxxxxxxxxxxx的小数,其中x共有23个x是0、1之一,也就是说,整数部分的1并不包含在23位中。这部分我用十进制的m表示。 
    32位二进制如下: SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM. 十进制的实数=(-1)^s*2^(e-127)*m. 
    如果你写了一个float数,计算机会把这个float转为二进制,再移位为1.xxxxxxxxxxxxxxxxxxxxxxx的形式,把移位保存在e部分,把符号位保存在s部分,把23个x保存在m部分。