【发布时间】:2010-02-07 19:07:20
【问题描述】:
a) 下面的赋值不应该导致错误吗,因为数字 100 是 int 类型的文字,并且编译器不允许隐式缩小转换?
byte b = 100;
b) 如果编译器没有抱怨从 int literal 到 type byte 的隐式窄化转换,那么为什么它也不允许从 double literal 到 type float (我意识到我们可以通过使用 F/f 后缀指定浮点文字来避免这个错误)?
byte b=16; //OK
float f1=16.9; //error
谢谢
【问题讨论】:
-
关于浮点转换的规则是落后的,但它们就是它们。
float f = (float)(1.0 / 10.0);没有充分的理由要求进行类型转换(f将为其类型保留 0.1 的最精确表示),但即使分配给d的值为 (关于双精度)远不及 0.1。