一个float的怪问题 public class Test { public static void main(String[] args) { // TODO 自动生成方法存根 float f=1.111111111111f; float g=1.222222222222f; System.out.println(f); System.out.println(g); }}结果:1.11111121.2222222为什么第一个是有个"2"的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 换成double就好了 精度问题 这要从java的数据结构说起 《代码大全2》中有很详细的说明对于失去精度的float你把它赋值给其他变量是没什么影响的,有影响的就是比较的情况如果你想对2个float(或double)比较最好编写一个带有精度判断的方法public boolean floatEquals(float f1,flaot f2){ if((f1-f2)<0.000001) return true; else return false;} 涉及机器码存储的问题,三言两语怎么说的清楚!简单来说,一般浮点数存储大多采用的IEEE754浮点数格式:4字节数它使用7位做阶码,一位符号位,23位尾数。存储办法是把数字转成二进制表示后,通过移动N(这个就是阶码,小数点左移为正,右移为负)位使之变成1.*******这样的格式。然后,把尾数[*******]存储在尾数里边(因为都是1.多,所以可以省略的) 如果[*******]位数超过23位,只取前23位并对第24位进行取舍(取1舍0)。 更详细的自己找书看吧从下例可以看到:取舍之后,1.111111=1.1111111 1.1111112=1.11111111(用再长的1也影响不到进位了,所以......)public class Temp { public static void main(String[] agras) { BigDecimal bd = new BigDecimal("0.111111"); bd = bd.multiply(new BigDecimal(2).pow(23)); System.out.println(bd); bd = new BigDecimal("0.1111111"); bd = bd.multiply(new BigDecimal(2).pow(23)); System.out.println(bd); bd = new BigDecimal("0.11111111"); bd = bd.multiply(new BigDecimal(2).pow(23)); System.out.println(bd); bd = new BigDecimal("0.1111112"); bd = bd.multiply(new BigDecimal(2).pow(23)); System.out.println(bd); }}output:932066.623488932067.4623488932067.54623488932068.3012096 java SWING的JList,如何使鼠标右键也起选定的作用? java一个小问题,各位老鸟帮忙解决一哈 java反射问题 tomcat启动没有任何错误.日志什么的也都正常,但是运维组说,总是启动完毕很久 收集java的常用函数代码!大家分享,共同学习!请分享者到此接分[续一]! java聊天软件 请问awt都有哪些BUG ? 有经验的人帮忙指教一下~~ 求帮助,请以下程序 简单的文件保存问题,请各位赐教 请大家介绍一下学习java2的比较好的书籍 概念问题,近来看看. 怎么用java实现修改unix下一些用户的口令?
{
if((f1-f2)<0.000001)
return true;
else return false;
}
简单来说,一般浮点数存储大多采用的IEEE754浮点数格式:4字节数它使用7位做阶码,一位符号位,23位尾数。存储办法是把数字转成二进制表示后,通过移动N(这个就是阶码,小数点左移为正,右移为负)位使之变成1.*******这样的格式。然后,把尾数[*******]存储在尾数里边(因为都是1.多,所以可以省略的) 如果[*******]位数超过23位,只取前23位并对第24位进行取舍(取1舍0)。 更详细的自己找书看吧从下例可以看到:取舍之后,1.111111=1.1111111 1.1111112=1.11111111
(用再长的1也影响不到进位了,所以......)public class Temp {
public static void main(String[] agras) {
BigDecimal bd = new BigDecimal("0.111111");
bd = bd.multiply(new BigDecimal(2).pow(23));
System.out.println(bd);
bd = new BigDecimal("0.1111111");
bd = bd.multiply(new BigDecimal(2).pow(23));
System.out.println(bd);
bd = new BigDecimal("0.11111111");
bd = bd.multiply(new BigDecimal(2).pow(23));
System.out.println(bd);
bd = new BigDecimal("0.1111112");
bd = bd.multiply(new BigDecimal(2).pow(23));
System.out.println(bd);
}
}
output:
932066.623488
932067.4623488
932067.54623488
932068.3012096