xaramamburu | Дата: Воскресенье, 25.09.2011, 12:46 | Сообщение # 1 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Как показывает опыт, тип поля базы данных для хранения цены - лучше использовать денежный(основной с четырьмя знаками после запятой), а для хранения количества (денежный(основной с тремя знаками после запятой), в место полей числовой (одинарное с плавающей точкой).Поэтому если не хотите ловить проблемы с копейками и граммами измените типы полей в базе данных. Вместо денежного типа можно использовать числовой(действительное) с указанием количества цифр до запятой и после запятой (тип Decimal).
|
|
| |
Avatar | Дата: Пятница, 30.09.2011, 23:13 | Сообщение # 2 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| Почему денежный тип использовать лучше чем, допустим числовой с плавающей точкой двойной точности? Ведь у денежного типа четыре разряда, а у типа с двойной точностью более 14 разрядов после запятой.
Andrey
|
|
| |
xaramamburu | Дата: Пятница, 30.09.2011, 23:32 | Сообщение # 3 |
Полковник
Группа: Администраторы
Сообщений: 240
Статус: Offline
| Если пользоваться не денежным типом данных и производить интенсивные вычисления, то на миллиардных суммах очень быстро поплывут копейки и даже рубли. Дело в том, что у типов с плавающей точкой положение этой точки не постоянное и если в процессе вычисления число будет сильно большое, то точка уплывет поближе к левому краю, и копейки пропадут. Кроме того, так как в формате с плавающей точкой все числа хранятся приближенно, то даже при небольших числах, при их интенсивном использовании, например в приходе и расходе товара, хвост числа начинает расходиться. И при вычислении остатка этот хвост придется обрубать до нескольких знаков после запятой, иначе остаток товара и цена не будет сводиться к нулю.
|
|
| |