一个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 新手求助!Eclipse中连接sqlserver2000数据库,用maven管理包,出现如下错误 关于gridlayout布局的问题```` 计算相对位置的算法 正则表达式过滤-牛人帮忙 一个菜鸟问题~~~有关于JAVA基础问题 请问:file搜索怎样支持dos提示符*,有没有现成的方法可以?谢谢 关于类间的调用[求助][急]!! applet与服务器的连接 java读写word文档 哪里有兼职做???? 概念问题,近来看看. 怎么用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