使人不理解的一个问题

scott 2010-03-01 02:01:42
从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 精度丢失

请问第一个例子精度没丢失,为什么第二个例子精度丢失了?
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
py330316117 2010-03-02
  • 打赏
  • 举报
回复
看了上面的链接,觉得比较复杂啊!我只要记住浮点数的转换会造成精度的丢失,而整数不会就完了
梦_枫 2010-03-02
  • 打赏
  • 举报
回复
http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html
这确实是个好贴。。。。。
霏霏老爹 2010-03-02
  • 打赏
  • 举报
回复
看了浮点数在计算机中存储方式,不错,有点收获
智鹿软件 2010-03-02
  • 打赏
  • 举报
回复
(1)double s = 22.456789;
(2)double s = 22.234567;

随机定义了两个数,为什么结果会这样呢?
解析:浮点数是不连续的,这个要“碰运气”了!呵呵呵.........
musiclee 2010-03-01
  • 打赏
  • 举报
回复
wanyyl2353406 2010-03-01
  • 打赏
  • 举报
回复
ding,我也迷茫这个
xxpp688 2010-03-01
  • 打赏
  • 举报
回复
我觉的是double是双精度32位的浮点数,
float 单精度16位的浮点数
所以double在强制转换成float时会丢失精度
wenzheng38 2010-03-01
  • 打赏
  • 举报
回复
要看浮点数在计算机中的表示形式
有的数能恰好表示,有的数不能就会有丢失
小李子 2010-03-01
  • 打赏
  • 举报
回复
第一个恰好能表示到?
浮点数反正也不是连续表示的

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧