A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田旭阳 黑马帝   /  2012-9-16 10:53  /  1354 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田旭阳 于 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的介绍,却没有找到合适的说明

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
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类来解决

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马