本人是初学者,请大虾请看下面的程序
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 ?还请大虾指教一下?
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 ?还请大虾指教一下?
解决方案 »
- 文件夹 重命名 急 求代码
- 一条课本线程题目!各位善人来帮帮忙!因初学线程,不是很懂的说~在线等!
- java和C中如何把IP转换成网络字节顺序相互传输?
- 怎样才能使窗口运行一段时间后,自动从最小化变为最大化? 写出代码者送50分,急!!!!!!
- actionAdapter 出错......
- 关于数据库存储时间问题?急~~!!!在线等
- A[Y[(X[ch>>5]<<4)|((ch>>1)&0xF)]|(ch&0x1)]; 这是什么意思?
- 一个字符集的问题
- jdk环境下能否进行junit测试
- 请问这是什么错误??困扰我很久了!请各位帮忙!
- 做一个简单的客户端服务器端,出现一个问题???
- 在线等 求java 数据库入门视频
这种问题在实际应用中不是特别重要的
如果楼主好好学过微机原理,就会一点也不觉得奇怪了。
没好好学过也不要紧,知道浮点数本来就不是准确的就OK了。如果你不信,你可以手工试着把15.123化成二进制,你就知道我说的对不对了。一个float连底数加指数才32个比特,却能表示10的38次方那么大的数。这是为什么?就是牺牲了精度换来了表示范围。
另外,当把一个数打印成字符串时,可以控制它的显示位数的,方法是使用相应的Formatter类。
还需要知道显示出来的字符串只是一个近似的显示结果,它并不准确对应内存里的那个float,内存里的float,如果不转化成近似的十进制字符串来显示,人眼看起来是很费劲的。
怎么1.1f的时候就输出小数点后面的一位呢?
有点奇怪……
当然在转化的过程中会产生精度的丢失。这个问题呢。其实不必弄的很清楚。
JAVA语言不是C++或者C语言。这里精度的不准确一般不会影响你的应用。。