регистр десятичных чисел
Какая это основная потребность?
Это вытекает из того факта, что, в конечном счете, компьютеры представляют собой внутренние числа в двоичном формате. Это неизбежно приводит к ошибкам округления.
Учтите это:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
Многоборье [...] означает «бесконечный». Если вы внимательно посмотрите на это, существует бесконечный повторяющийся паттерн (= '0011')
Итак, в какой-то момент компьютер должен округлить это значение. Это приводит к ошибкам накопления, возникающим из-за многократного использования чисел, которые хранятся неточно.
Скажите, что вы хотите хранить финансовые суммы (числа, которые могут иметь дробную часть). Прежде всего, вы не можете использовать целые числа явно (целые числа не имеют дробной части).
С чисто математической точки зрения естественной тенденцией будет использование float
. Но в компьютере числа с плавающей точкой имеют часть числа, которая находится после десятичной точки - «мантисса» - ограниченная. Это приводит к ошибкам округления.
Чтобы преодолеть это, компьютеры предлагают конкретные типы данных, которые ограничивают двоичную ошибку округления в компьютерах для десятичных чисел. Это тип данных, который
должны быть использованы для представления финансовых сумм. Эти типы данных обычно идут под именем Decimal
. Так обстоит дело в C #, например. Или DECIMAL
в большинстве баз данных.