在.NET中,默认所有整型数都是32位int型,所有浮点数都是64位double型,因此将浮点常量赋值给float型变量时,必须在常量后添加F,比如 float num = 2.5F,否则会造成编译器错误。我要问的问题是:
1、上面所说的必须加后缀F,编译器是不是将double强制类型转换为低精度的float?如果编译器是做了强制类型转换的话,那下面这个语句为什么也会错呢?demical num1 = 2.5,2.5是双精度型,把它赋值给128位的demical型,应该是隐式转换就可以实现的啊,为什么还需要:demical num1 = 2.5D?
2、既然浮点型必须加后缀进行转换,整数型为什么不需要呢?比如 short num2 = 25是不是也会错呢,按理说25是整型,赋值给short型有可能会造成精度丢失,也应该加个后缀名S,但查了很多书,好象整型常量不需要做这样的工作,也没有后缀名S,整型后缀只有U、L、UL,这是为什么呢?
谁说double -> decimal是隐式类型转换?!
第一个问题,.NET的帮助中也写得非常的清楚:
只要常数表达式的值在目标类型的范围内,隐式常数表达式转换就允许将 int 类型的常数表达式转换为 sbyte、byte、short、ushort、uint 或 ulong。
double到decimal的转换不是一定都可以进行的,因为double是非精确类型,其值是一个近似值,而decimal是精确类型,所以不允许进行这种隐式转换