The standard rule for converting between real floating-point
types (binary to binary, decimal to decimal
and decimal to binary) is as follows:
If the value being converted can be represented exactly in the
new type, it is unchanged. If the value being converted is in the
range of values that can be represented but cannot be represented
exactly, the result is rounded, according to the current compile-time
or runtime rounding mode in effect. If the value being converted is
outside the range of values that can be represented, the result is
dependant on the rounding mode.
Integer to floating-point (binary
or decimal)
If the value being converted can be represented exactly in the
new type, it is unchanged. If the value being converted is in the
range of values that can be represented but cannot be represented
exactly, the result is correctly rounded. If the value being converted
is outside the range of values that can be represented, the result
is quiet NaN.
Floating-point (binary
or decimal) to integer
The fractional part is discarded (i.e., the value is truncated
toward zero). If the value of the integral part cannot be represented
by the integer type, the result is one of the following:
If the integer type is unsigned, the result is the largest representable
number if the floating-point number is positive, or 0 otherwise.
If the integer type is signed, the result is the most negative
or positive representable number according to the sign of the floating-point
number.