从double转换为float,精度丢失问题?
package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.456789;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}
这个输出是##22.456789  精度没丢失~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~package com.xc.util.datecheck;public class Test2 {public static void main(String[] args) {
double s = 22.234567;
System.out.println("##"+Float.parseFloat(String.valueOf(s)));
}}这个输出是##22.234568 精度丢失请问第一个例子精度没丢失,为什么第二个例子精度丢失了?

解决方案 »

  1.   

    我觉的是double是双精度32位的浮点数,
    float 单精度16位的浮点数
    所以double在强制转换成float时会丢失精度
      

  2.   

    看这个帖子吧 就明白了
    http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
      

  3.   

    http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
    这确实是个好贴。。
      

  4.   

    (1)double s = 22.456789; 
    (2)double s = 22.234567; 随机定义了两个数,为什么结果会这样呢?
    解析:浮点数是不连续的,这个要“碰运气”了!呵呵呵.........