为什么short i = 10;
没有错而float a = 1.0;却有错。
(不要回答我将1.0改成1.0F)整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
如果是这样的话,那为什么
short i = 10;没有错,10不应该是int类型的么?
如果说10没有超过short的范围,所以可以这么做,那为什么float a = 1.0;又有错了?1.0也没有超过float的范围啊?
为什么1/ 0有错而1 / 0.0没有错?得到的是无穷。
这不都是0么。谢谢回答。!
没有错而float a = 1.0;却有错。
(不要回答我将1.0改成1.0F)整数默认全当做int来处理,浮点数默认全当做double来处理,是这样的吧?
如果是这样的话,那为什么
short i = 10;没有错,10不应该是int类型的么?
如果说10没有超过short的范围,所以可以这么做,那为什么float a = 1.0;又有错了?1.0也没有超过float的范围啊?
为什么1/ 0有错而1 / 0.0没有错?得到的是无穷。
这不都是0么。谢谢回答。!
楼主【joejoe1991】截止到2008-07-14 12:51:16的历史汇总数据(不包括此帖):
发帖的总数量:230 发帖的总分数:6512 每贴平均分数:28
回帖的总数量:1782 得分贴总数量:881 回帖的得分率:49%
结贴的总数量:183 结贴的总分数:5690
无满意结贴数:4 无满意结贴分:130
未结的帖子数:47 未结的总分数:822
结贴的百分比:79.57 % 结分的百分比:87.38 %
无满意结贴率:2.19 % 无满意结分率:2.28 %
楼主加油
public static final float POSITIVE_INFINITY 1f/0fLZ明白了吧。
float的结尾要加f的,为的是和double区别,Java就是这样规定的。
例如:float m=1.0;//它会提示:Type mismatch: cannot convert from double to float
float m=1.0f;//这个显示指定了使用单精度,当然没问题。对于整数而言,它默认的确是int类型,但是如果没有超出当前类型大小则会默认进行转换。
我们从下面可以看出默认的是int类型。
对于long
long mm=9999999999;//The literal 9999999999of type int is out of range
这里对于Int来说是超出范围了
long mm=9999999999L// 这个却没有错误,说明默认就是Int类型的。
byte m=1;//没有问题吧,根据当前是byte来处理。
byte m=444;//明显就会提示:Type mismatch: cannot convert from int to byte可见范围超出之后它默认使用Int来处理了。short m=1;//没问题
short m=1111111111;//Type mismatch: cannot convert from int to short
类型 存储需求 取值范围
float 4字节 大约(+/-)3.402 823 47E + 38F(有效位数为6~7位)
double 8字节 大约(+/-)1.797 693 134 862 315 70E + 308(有效位数为15位) double表示这种类型的数值精度是float的两倍(有人称之为双精度)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足要求。例如,用7位有效数字足以精确表示普通雇员的年薪,但表示公司总裁的年薪可能就不够用了。实际上,只有很少的情况适合使用float类型,例如,需要快速的处理单精度数据,或者需要存储大量数据。 float类型的数值有一个后缀F(例如,3.402F)。没有后缀F的浮点数值(如3.402)默认为double类型。当然,也可以在浮点数值后面添加后缀D(例如,3.402D)。
int b = 10;float c = 1.0f;
double d = 1.0;我想是不是java的规则就是这样,float,double需要区分。double 是默认 float就要加 f但是为什么int short 不用这么做,也是规定吧。为什么这么定,还请高手指导,或是 我理解的不对。哈哈
注意:0.0 是 double 类型常量,0 是 int 类型常量,1 / 0.0 要首先将 1 自动类型转换到 1.0 再完成浮点数相除计算结果自然是 double 类型的,而 double 类型变量按 IEEE754 标准可以取到三个特殊值即 NaN 正无穷 负无穷,所有可以。而 1 / 0 因为两边都是 int 型常量,所以是整除,而整除结果当然是 int 型整数,int 型变量无法表示和存储无穷这个特殊值,当然不可以,运行到这儿会抛 ArithmeticException 运行时异常。
浮点都是以double运算
如果你输入的数字大于short的最大数,则编译会出问题。而整数的转换是从 int 想 long ,所以一般没问题。
而浮点的转换是从 double 向 float ,所以出现了问题。
这一点跟学外语很相像,不需要问为什么。
而对于double float的1.0两者是不直接兼容的 不适用于自动转换(会损失精度)
why?int转为short,byte只要将高位的0截断
而float 32位保存 SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM 其中S是符号位 E是指数位 M是有效精度位
类比于double 52位精度 The "float" class takes 4 bytes of storage, and have 23 binary digits of precision. The "double" class takes 8 bytes of storage, and have 52 binary digits of precision.
25楼答案漂亮
学习ing