# math.basis-points
100 basis points is 1 percent is a ratio of 0.01. The three units differ only
by powers of ten, so converting between them is moving a decimal point, and
this does exactly that on the text of the number. `"0.07"` as a ratio is
`"7"` percent, where `0.07 * 100` in floating point is `7.000000000000001`.
Values are decimal strings in and out, never floats, so any rate a person can
write down converts without loss and without a size limit. Output is the
shortest form: no leading zeros, no trailing fractional zeros, no trailing
point, and zero is `"0"` (never `"-0"`).
Input is strict: an optional leading `-`, digits, and optionally `.` followed
by digits. `"12.5%"`, `"+5"`, `".5"`, `"5."`, `"1e3"`, `"1,5"` and spaces are
all errors. Strip a `%` sign before calling; this is not a parser for
free-form text.
The registry keeps rates as integer basis points, so two helpers are exported
for the common edges: `toBasisPoints(value, unit)` returns an integer and
refuses a rate that is not a whole number of basis points (12.345% is 1234.5
basis points, which no integer holds) or is beyond ±(2^53 - 1), and
`fromBasisPoints(bp, unit)` renders an integer basis-point rate as a decimal
string.