powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Что лучше: float vs numeric(5,2)
25 сообщений из 30, страница 1 из 2
Что лучше: float vs numeric(5,2)
    #35410120
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги

Есть столбец, содержащий проценты (0% - 100%) с 2-мя знаками после запятой (пример, 90.56%). Мне интересно узнать, какой тип данных лучше всего использовать для такого столбца - точные (к примеру, decimal(5,2) или типы данных с приближенным представлением чисел, например, float.

Я склоняюсь использовать decimal(5.2) - (1) точное представление числа, (2) - дополнительное естественное ограничение на диапазон числа.

Вопрос достаточно общий, но на всякий случай - использую Sybase ASE 12.5

Спасибо,
Виталий
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411152
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проценты надо хранить с ооо-о-о-очень длинным хвостом. Иначе вы в сумме 100 не получите.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411281
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ. Но с float тоже можно не получить 100%. По-моему, надежнее использовать numeric и перед загрузкой данных корректировать проценты, если сумма не соответствует 100%.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411530
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoffНо с float тоже можно не получить 100%
Верно. Ни один способ этого не гарантирует.

davydoffПо-моему, надежнее использовать numeric
Да.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411718
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду, что чем длиннее хвост - тем лучше.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411870
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЯ имел в виду, что чем длиннее хвост - тем лучше.
Кому лучше?
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411899
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше - расчетам, которые будут делаться с этими процентами, как исходными аргументами.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411914
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше последующим расчетам, которые будут проводиться с этими процентами, как с исходными данными.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411916
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, что-то у меня реплика "не проявилась".
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411939
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительЛучше - расчетам, которые будут делаться с этими процентами, как исходными аргументами.
Вообще-то

По-моему, надежнее использовать numeric и перед загрузкой данных корректировать проценты, если сумма не соответствует 100%.
В случае float-ов теоретически можно не получить 100% даже после подобной корректировки, все равно придется округление использовать. ДА и не вижу я у автора задачи хранить значение с максимальной точностью. Хотя, вполне может быть, и float спасет автора. У меня, например, коэффициенты (проценты) хранятся по-разному, есть и как numeric, есть и как float, в зависимости от требования к точности.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35411953
Чорный Бада
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, float следует по-возможности избегать. Чревато жестокими засадами - на здешнем форуме, как я помню, не раз поднимались темы связанные с фичами рассчётов с плавающей точкой.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412032
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть один аргумент в пользу float и вообще, типов с приближенным представлением числа - если изменяется формат, то не придется в этом случае менять тип столбца. А минусы очевидны - платформенно-зависим (по крайней мере на ASE 12.5), содержит больше ненужных значащих цифр (в том числе ненужный хвост), чем тип с точным представлением. Я считаю, что данные в БД должны быть представлены точно. Если производятся какие-то вычисления, то пожалуйста, преобразовывай тип в любой другой и проводи вычисления с преобразованным числом. Задача БД - не вычислять, а хранить данные.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412172
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoffЯ считаю, что данные в БД должны быть представлены точно. Если производятся какие-то вычисления, то пожалуйста, преобразовывай тип в любой другой и проводи вычисления с преобразованным числом. Задача БД - не вычислять, а хранить данные.
Для хранения 1/3 предлагаете ограничить точность, или хранить отдельно числитель и знаменатель? А для pi?
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412240
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, зависит от природы данных. Если количество знаков после запятой всегда не больше двух, то можно вообще хранить в целочисленном типе данных. Т.е. вместо 90.56% хранить 9056, а при выводе производить соответствующее форматирование.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412283
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, спасибо за обсуждение! Для хранения 1/3 даже float не хватит (и любого другого типа тоже), если хранить это число в десятичной форме. Надо следовать рациональным принципам. Если исходные данные содержат только 2 знака после запятой, то надо использовать тип с точным представлением числа с 2-мя знаками после запятой. Не имеет смысла хранить мусор в БД. Что касается pi - то такую константу не надо хранить в БД, она и так известна. Согласен с miksoft, что это зависит от природы данных. Если данные изначально поставляются с 2-мя знаками после запятой, то наверно не стоит для этого использовать float. Что касается хранения в целочисленном виде - не согласен. Иначе во всех местах придется реализовывать алгоритм преобразования целочисленных данных в нужную, читабельную форму. numeric(A,B) , как мне кажется, решает эту задачу.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412297
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoffЧто касается pi - то такую константу не надо хранить в БД, она и так известна
Я в шоке. Кому известна? А если необходима большая точность, чем обеспечивается стандартной функцией в БД? Да и ясно было, что речь идет о любом иррациональном числе, хоть синусы храните, коть корни - пофигу, все равно Ваш тезис рассыпается.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35412758
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов davydoffЧто касается pi - то такую константу не надо хранить в БД, она и так известна
Я в шоке. Кому известна? А если необходима большая точность, чем обеспечивается стандартной функцией в БД? Да и ясно было, что речь идет о любом иррациональном числе, хоть синусы храните, коть корни - пофигу, все равно Ваш тезис рассыпается.

1. Мне. 3.14159265
2. Надо использовать другое средство для вычислений
3. В платежных системах нет иррациональных чисел
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35413314
ИМХО, с точки зрения производительности лучше всего использовать int, умножая проценты на 100, а потом деля. Но это может усложнить логику процедур и/ли клиента...
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35414064
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В платежных системах иррациональные числа нет-нет да и проскакивают. Я сталкивался с ними при сложных расчетах с разными валютами, пересетами по курсам валют, при пропорциональном разнесении сумм.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35414310
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительВ платежных системах иррациональные числа нет-нет да и проскакивают. Я сталкивался с ними при сложных расчетах с разными валютами, пересетами по курсам валют, при пропорциональном разнесении сумм.

То, что иррациональный числа проскакивают в процессе расчета, говорит лишь о том, что используется неверный алгоритм.
В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них.
Единственный случай, который я не знаю, как считать - это аннуитетная схема. Но, вроде как, работает, значит можно рассчитать и ее.
А проблемы с "хвостами" при пересчете курсов валют никаким увеличением точности не решить. И решается это путем отнесения "лишних" копеек в "специально отведенное" место. Вопрос лишь в правильном выборе момента этого отнесения.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35414388
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них.
Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит...
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35416383
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них.
Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит...

И чего он стоит?
Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают.
И все.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35416483
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1 miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них.
Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит...

И чего он стоит?
Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают.
И все.
Много стоит :)
Если система в расчете будет ограничена 2-мя знаками после запятой (точность - копейка), то от метода расчета сумма НДС будет плавать. Например возьмите n-е количество одного товара, умножте на стоимость и подсчитайте НДС. И так же можно подсчитать НДС одного товара и умножить на количество - суммы будут разные.
Сам знаю довольно распространенную систему - которая так делает (хранит в одном месте НДС каждого товара с точностью до копейки, а вдругом - групповую НДС с тойже точностью и при этом суммы разные) :)
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35416484
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь понятно описал :)
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35416511
Николай1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алымов Анатолий Николай1 miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них.
Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит...

И чего он стоит?
Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают.
И все.
Много стоит :)
Если система в расчете будет ограничена 2-мя знаками после запятой (точность - копейка), то от метода расчета сумма НДС будет плавать. Например возьмите n-е количество одного товара, умножте на стоимость и подсчитайте НДС. И так же можно подсчитать НДС одного товара и умножить на количество - суммы будут разные.
Сам знаю довольно распространенную систему - которая так делает (хранит в одном месте НДС каждого товара с точностью до копейки, а вдругом - групповую НДС с тойже точностью и при этом суммы разные) :)

И в чем тут проблема?
Все зависит от требований учета. Если учет требует отчета по каждому товару, то так и надо считать. По каждому отдельно. А по всем сразу - только в справочных целях. Ну, или наоборот.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Что лучше: float vs numeric(5,2)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]