问个菜鸟问题,大虾请进

QQ150900 2009-07-06 12:03:31
本人是初学者,请大虾请看下面的程序
class StringTest
{
public static void main(String[] args)
{
int i=3;
float ff=15.123f;
System.out.println(i+ff);
//这句打印出来的结果是18.123001

如果将ff设为1.1f,print打印出来的是4.1
}
}

为什么结果会是18.123001 ?

还请大虾指教一下?
...全文
25 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2009-07-07
  • 打赏
  • 举报
回复
就是精度问题,这种情况很正常的
bigbug9002 2009-07-07
  • 打赏
  • 举报
回复
2楼说的对啊,凡是乘2的若干次不能成为整数的浮点数,机内表示都不可能是精确表示。
blueallstar 2009-07-07
  • 打赏
  • 举报
回复
所以以后不要拿较大的数和较小的数直接相加相减,那样会造成“丢失”小的数
「已注销」 2009-07-07
  • 打赏
  • 举报
回复
精度啊,

大哥,现在内存都NG了,别再省那点内存了,直接DOUBLE吧
361719298 2009-07-06
  • 打赏
  • 举报
回复
学习了。。。
晨星 2009-07-06
  • 打赏
  • 举报
回复
浮点数有精度问题的。
如果楼主好好学过微机原理,就会一点也不觉得奇怪了。
没好好学过也不要紧,知道浮点数本来就不是准确的就OK了。如果你不信,你可以手工试着把15.123化成二进制,你就知道我说的对不对了。一个float连底数加指数才32个比特,却能表示10的38次方那么大的数。这是为什么?就是牺牲了精度换来了表示范围。
另外,当把一个数打印成字符串时,可以控制它的显示位数的,方法是使用相应的Formatter类。
还需要知道显示出来的字符串只是一个近似的显示结果,它并不准确对应内存里的那个float,内存里的float,如果不转化成近似的十进制字符串来显示,人眼看起来是很费劲的。
361719298 2009-07-06
  • 打赏
  • 举报
回复
这你应该去问 JVM 了
这种问题在实际应用中不是特别重要的
lovecj6185 2009-07-06
  • 打赏
  • 举报
回复
学习了
原来如此
HowToStrong 2009-07-06
  • 打赏
  • 举报
回复
楼主。这个问题在计算的时候JVM是把INT类型转化为FLOAT类型来计算的。
当然在转化的过程中会产生精度的丢失。这个问题呢。其实不必弄的很清楚。
JAVA语言不是C++或者C语言。这里精度的不准确一般不会影响你的应用。。
Miracle1216 2009-07-06
  • 打赏
  • 举报
回复
奇怪的事很多,反正就是Float的精度问题了。
晨星 2009-07-06
  • 打赏
  • 举报
回复
我猜是JAVA库在转换float到string时,如果发现末尾跟着的全是无效的0,就自动去掉了。
catici 2009-07-06
  • 打赏
  • 举报
回复
对呢?float型的数输出不是小数点后面六位吗?
怎么1.1f的时候就输出小数点后面的一位呢?
有点奇怪……
ffen0510 2009-07-06
  • 打赏
  • 举报
回复
学了就走~~~顺便拿分

62,614

社区成员

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

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