Real literals

Real literals are used to write values of types float, double, and decimal. real-literal :: decimal-digits.decimal-digitsexponent-part real-type-suffix.decimal-digitsexponent-part real-type-suffix decimal-digitsexponent-partreal-type-suffix decimal-digitsreal-type-suffixexponent-part :: e sign decimal-digitsE sign decimal-digitssign :: one of +-real-type-suffix :: one of F f D d M m
If no real-type-suffix is specified, the type of the real literal is double. Otherwise, the real-type-suffix determines the type of the real literal, as follows: A real literal suffixed by F or f is of type float. [Example: For example, the literals 1f, 1.5f, 1e10f, and 123.456F are all of type float. end example] A real literal suffixed by D or d is of type double. [Example: For example, the literals 1d, 1.5d, 1e10d, and 123.456D are all of type double. end example] A real literal suffixed by M or m is of type decimal. [Example: For example, the literals 1m, 1.5m, 1e10m, and 123.456M are all of type decimal. end example] This literal is converted to a decimal value by taking the exact value, and, if necessary, rounding to the nearest representable value using banker's rounding (11.1.6). Any scale apparent in the literal is preserved unless the value is rounded or the value is zero (in which latter case the sign and scale will be 0).

[Note: Hence, the literal 2.900m will be parsed to form the decimal with sign 0, coefficient 2900, and scale 3. end note]

If the specified literal cannot be represented in the indicated type, a compile-time error occurs.
The value of a real literal having type float or double is determined by using the IEEE "round to nearest" mode.