int i = 1; // -2,147,483,648 to 2,147,483,647
float f = 2.1f; // -3.402823e38 to 3.402823e38
long l = 3; // -922337203685477508 to 922337203685477507
double dbl = 4.5; // -1.79769313486232e308 to 1.79769313486232e308
decimal dec = 5.2m; // -79228162514264337593543950335 to 79228162514264337593543950335
dec = i; // No error
dec = l; // No error
dec = f; // Compiler error
dec = dbl; // Compiler error
f = (float)dec; // No error (May loss precision) ok
**dec = (decimal)dbl;** // No error why it requires ?
为什么上面的代码需要显式转换。浮点数/双精度数 > 十进制数的范围?