菜鸟提问,真奇怪,这是为什么????

868686 2003-10-18 05:14:46
public class test4_4
{
static float b = 10.98f;
public static void main(String args[])
{

int a=53;
float c=a+b;
System.out.println("="+c);
}
}
运行结果为:
=63.98

public class test4_4
{
static float b = 10.98f;
public static void main(String args[])
{

int a=54;
float c=a+b;
System.out.println("="+c);
}
}
运行结果为:
=64.979996

为什么只改了a 的值53->54而结果的精度却变了,为什么?



...全文
38 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
LuZhou 2003-10-19
  • 打赏
  • 举报
回复
用BigDecimal
老土豆T 2003-10-19
  • 打赏
  • 举报
回复
计算机引论没学好吧。:)

所有的语言都这样,不过讨论了我才知道。:)

可以使用 DecimalFormat 写一些静态方法,,对数位表示进行统一的格式定义:)
868686 2003-10-19
  • 打赏
  • 举报
回复
其实我不是计算机专业毕业的,谢谢各位好心朋友的帮助。。。。
icecloud 2003-10-19
  • 打赏
  • 举报
回复
如果要避免这种情况
有2种方法
1 采用BigDecimal
2 采用int或long,自己控制小数点
playboyxp 2003-10-19
  • 打赏
  • 举报
回复
这是float引起得精度问题
float和double都是近似得
只能取道小数点后得几位
moke33 2003-10-18
  • 打赏
  • 举报
回复
少见多怪,呵呵
conning333 2003-10-18
  • 打赏
  • 举报
回复
其实这是很正常的一个道理。
Diamonxu 2003-10-18
  • 打赏
  • 举报
回复
float是浮点类型,在计算机内部是近似的表示。
确实是这样的,看下面的运行结果就明白的
float f=0.0f;
for(int i=0;i<10;i++)
{
f+=0.1f;
System.out.println(f);
}
运行过几个之后就会出现这种问题,是正常的现象。
chinaemin 2003-10-18
  • 打赏
  • 举报
回复
要想得到精确的数值,就不能够用float和double类型,最好用BigDecimal类,或者用其他转换手段:)
具体,可以看一下effective java这本书,有详细的介绍。
wellsoon 2003-10-18
  • 打赏
  • 举报
回复

javascript 也是这样的问题。

http://expert.csdn.net/Expert/topic/2203/2203060.xml?temp=.4144251

loveyousomuch 2003-10-18
  • 打赏
  • 举报
回复
应该是这样,
不过楼主好细心!!
feiyuegaoshan 2003-10-18
  • 打赏
  • 举报
回复
float是浮点类型,在计算机内部是近似的表示。

62,614

社区成员

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

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