JAVA 中的Float类型不是7位有效数字吗?

JAVA 中的Float类型不是7位有效数字吗?为啥我的程序打印结果让人很迷惑,也不知道是怎么进行四舍五入的,跪求答案,程序如下:
public class FloatTest
{
public static void main(String args[] ){
float f=12345.08745f;
System.out.println(f);
}
}
答应出来的结果是:12345.088
小弟在此谢过啦哈。。。。。

首先说一下:
范围是3.4E-38 ——3.4E+38,可提供7位有效数字。
上述这两个量都是近似值,各个编译器不太一样的。

下面我就将标准值是怎么定义的,和你说一下:
这个比较复杂,建议你找一下IEEE754标准看一下。
这个简单说一下吧:
在IEEE754标准中进行了单精度浮点数(float)和双精度数浮点数(double)的定义。float有32bit,double有64bit。它们的构成包括符号位、指数位和尾数位。
这些位的构成如下:
种类-------符号位-------------指数位----------------尾数位----
float---第31位(占1bit)---第30-23位(占8bit)----第22-0位(占23bit)
double--第63位(占1bit)---第62-52位(占11bit)---第51-0位(占52bit)

取值范围主要看指数部分:
float的指数部分有8bit(2^8),由于是有符号型,所以得到对应的指数范围-128~128。
double的指数部分有11bit(2^11),由于是有符号型,所以得到对应的指数范围-1024~1024。

由于float的指数部分对应的指数范围为-128~128,所以取值范围为:
-2^128到2^128,约等于-3.4E38 — +3.4E38

精度(有效数字)主要看尾数位:
float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-09
计算机是二进制的,不管你十进制的什么事儿。

float f=12345.08745f;
这个数据在计算机进行二进制表达的时候更接近12345.088这个十进制数据

Float的7位有效表达数字来由:4字节共32位:可以表达2的32次方的十进制数,可表达:1024*1024*1024*4 > 4000000000 小数点顶一位、剩下8位平分给正负整数,所以有效位数是7-8位。

数据过大时,还会用科学技术法表示,有效位数就更少了(可能只有2-3位)。
此时要想完整显示该数据可以用java中的java.text.DecimalFormat来完成。本回答被网友采纳
第2个回答  2010-12-09
我还没有学这到这一章节来呃
问了一下师兄,
他说:
单精度数的输出只能保证6到7个有效数字,其余各位不准确,但在内存中的存放是准确的.
- -#,这样,不知道,你懂没?