Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: по точности double
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » по точности double

Страниц (1): [1]
 

1. broshurkaplus - 22 Ноября, 2016 - 13:10:46 - перейти к сообщению
при разворачивании нового экземпляра одного старого проекта через некоторое время обнаружил что поле с типом double не так как планировалось сохраняет данные (агрегация количественных параметров).
те
имеем числа с максимум 8 знаков в целой части и 12 знаков после запятой,
поле используется как первичный ключ.
например число 1900.000000000179
сохраняет и заносит в бд тк есть, а на хостинге, где разворачивал проект
оказалось 1900.00000000018
в связи с чем пошел перекос данных.
(это ничего мы данные еще раз перегоним...)
запланировано использовать decimal (20,12), тк целое может быть max mediumint
кто сталкивался почему это могло произойти??
какой тип поля лучше использовать?
спасибо
2. Мелкий - 22 Ноября, 2016 - 13:25:22 - перейти к сообщению
Потому что плавающая запятую в качестве PK - это к неожиданным граблям.
Нельзя формат с плавающей запятой использовать для точной математики. By design результат может плыть.
Если у вас есть требования к точности хранимых и обрабатываемых данных - то вам нужен формат с фиксированной запятой. Либо свести задачу вовсе к целочисленной, а запятую добавлять при выводе значений.

 

Powered by ExBB FM 1.0 RC1