Float a = 1.2;
有一个错误,因为它将十进制作为double值,double是一个比float更大的数据类型.
现在,它将整数作为默认的int类型.那么,为什么以下代码没有给出任何错误?
Byte b = 20;
解决方法
A narrowing primitive conversion from @H_301_16@double to @H_301_16@float is governed by the IEEE 754 rounding rules (07001). This conversion can lose precision,but also lose range,resulting in a @H_301_16@float zero from a nonzero @H_301_16@double and a @H_301_16@float infinity from a finite double. A @H_301_16@double NaN is converted to a @H_301_16@float NaN and a @H_301_16@double infinity is converted to the same-signed @H_301_16@float infinity.
A narrowing conversion of a signed integer to an integral type T simply discards all but the n lowest order bits,where n is the number of bits used to represent type T. In addition to a possible loss of information about the magnitude of the numeric value,this may cause the sign of the resulting value to differ from the sign of the input value.
另见this thread.