黑马程序员技术交流社区

标题: 关于float和double的问题 [打印本页]

作者: 田旭阳    时间: 2012-9-16 10:53
标题: 关于float和double的问题
本帖最后由 田旭阳 于 2012-9-17 16:26 编辑

public class FirstSample
{
public static void main(String[] args)
{
float xx = (2.0F-1.1F);
double yy = (2.0-1.1);
System.out.println(xx+" "+yy);
System.out.println(xx<0 ? yy : xx);
}
}
为什么xx和yy值不一样?
xx值后面不会带有多个9?
  第二个输出的xx值为什么会变了?


Java中float和double的取值范围该怎样理解?
float(浮点型)大小(位):32它的范围是:-3.40292347E+38~~3.40292347E+38 默认值是: 0.0F
double(双精度)大小(位):64 它的范围是: -
1.79769313486231570E+308~~1.79769313486231570E+308 默认值是:0.0d

3.40292347E+38的取值范围该怎样理解,“3.40292347”,“E”,“+38”各
表示什么意思
,查了很多网上关于IEEE 754的介绍,却没有找到合适的说明
作者: 史小兵    时间: 2012-9-16 11:20
3.40292347E+38的取值范围该怎样理解,“3.40292347”,“E”,“+38”各
表示什么意思,查了很多网上关于IEEE 754的介绍,却没有找到合适的说明
在使用科学技术法时,3.40292347表示系数,E可以理解为表示10,后边的+38表示的是10的幂指数。
就是3.40292347乘以10的38次幂
为什么xx和yy值不一样?
xx值后面不会带有多个9?
  第二个输出的xx值为什么会变了?

因为第一个xx是float类型,yy是double类型,在此你应该注意使用float和double参与运算时会发生精度丢失的现象因为java浮点数是使用二进制数据的科学技术来表示浮点数的因此可能不能精确地表示一个浮点数。
如果在开发时则可以考虑使用BigDecimal类来解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2