# `Float` literals

A literal notation for a `Float` value.

## Usage

A `Float` literal can be written in a variety of ways:

``````variable Float one = 1.0;
one = 1.0000;

variable Float oneMillion = 1000000.0;
oneMillion = 1_000_000.0;
oneMillion = 1.0M;
oneMillion = 1.0e6;
oneMillion = 1.0E+6;

variable Float half = 0.5;
half = 5.0E-1;
half = 5.0e-1;
half = 500m;
half = 500.0m;
``````

## Description

### Decimal point

`Float` literals almost always contain a decimal point, `.`, which:

• separates the fractional part from the whole number part, and
• syntactically distinguishes a `Float` literal from an `Integer` literal.

The exception to this rule is any `Float` literal with a one of the "fractional" magnitude suffices (`m`, `u`, `n`, `p`, `f`).

### Decimal magnitude suffices

A `Float` literal may be written with a magnitude, a whole magnitude:

• `k` (kilo), 103
• `M` (mega), 106
• `G` (giga), 109
• `T` (tera), 1012
• `P` (peta), 1015

Or a fractional magnitude:

• `m` (milli), 10-3
• `u` (micro), 10-6 (strictly this should be mu (μ), but that would be too hard to type on most keyboards)
• `n` (nano), 10-9
• `p` (pico), 10-12
• `f` (femto), 10-15

For example:

``````Float million = 1.0M;
Float millionth = 1u;
``````

### Grouping digits

An underscore, `_`, may be used to separate groups of three digits in the integer or fractional part of the literal.

``````Float million = 1_000_000.0;
Float millionth = 0.000_000_1;
``````

### Exponential notation

Exponential notation is supported using `e` or `E` to separate the mantissa (before the `E`) from the scale (after the `E`).

``````Float million = 2.0e6;
Float millionth = 2.0e-6;
``````

### As a primary

Invoking members of the class `Float` directly on a literal is permitted:

``````Float minusOneHalf = 0.5.negativeValue;
``````