Поплавок или десятичный для цен? - PullRequest
18 голосов
/ 22 сентября 2010

Какой тип (с плавающей запятой или десятичный) лучше всего использовать для хранения цен в базе данных mysql?

Ответы [ 5 ]

36 голосов
/ 22 сентября 2010

Число с плавающей точкой не является точным и может привести к совокупным ошибкам округления. Десятичная дробь - лучший формат для финансовой информации, которая должна быть точной.

15 голосов
/ 22 сентября 2010

Цены являются десятичными значениями, и ожидается, что вычисления по ним будут вести себя как десятичные дроби, когда дело доходит до округления, литералов и т. Д.

Это именно то, что делают десятичные типы.

Плавания хранятся в виде двоичных дробей, и они не ведут себя как десятичные дроби - их поведение часто не такое, как люди привыкли к десятичной математике. Прочитайте Руководство с плавающей точкой для подробных объяснений.

Для денежных значений никогда не используйте двоичные типы с плавающей запятой, особенно если у вас есть очень хороший десятичный тип!

9 голосов
/ 22 сентября 2010

Для финансовых расчетов используйте десятичное число

Согласно IEEE 754 числа с плавающей запятой всегда были двоичными, только новый стандарт IEEE 754R определял десятичные форматы.Многие дробные двоичные части никогда не могут быть равны точному десятичному представлению.Любое двоичное число может быть записано как m / 2 ^ n (m, n натуральных чисел), любое десятичное число как m / (2 ^ n * 5 ^ n).Поскольку для двоичных чисел не хватает простого множителя 5, все двоичные числа могут быть точно представлены десятичными числами, но не наоборот.

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

     1/4       1/8     1/16       1/32

Поэтому для финансовых расчетов используйте десятичное число, а не FLOAT

1 голос
/ 22 сентября 2010

Когда мы сохраняем число с плавающей точкой, мы не сохраняем точное число, это приблизительное значение. Целочисленная часть получает приоритет, а дробная часть настолько близка к размеру шрифта. Поэтому, если у вас есть расчеты и вам нужен точный результат, используйте десятичную дробь.

0 голосов
/ 22 сентября 2010

Пожалуйста, используйте BigDecimal, так как он лучше для цен, так как пенни округлены до доллара.

Джошуа Блох рекомендует BigDecimal.

...