powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Что лучше: float vs numeric(5,2)
30 сообщений из 30, показаны все 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
Что лучше: float vs numeric(5,2)
    #35416858
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай1
И в чем тут проблема?
Все зависит от требований учета. Если учет требует отчета по каждому товару, то так и надо считать. По каждому отдельно. А по всем сразу - только в справочных целях. Ну, или наоборот.
Это недостатки конкретной системы :) - она применяет разные подходы при расчете НДС (хотя это было бы без разницы, если бы точность расчете при любом методе была выше).
В налоговой знаю уже давно в программах ввели точность расчета сумм (денег) до 4-х (может уже и более) после запятой.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35417065
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погрешность вычислений с плавающий точкой является фундаментальной проблемой. На это всегда надо закладываться при расчетах и особым образом обрабатывать ситуации с лишними или недостающими копейками. Я пришел к выводу, что точность представления числа в БД должна определяться точностью представления величин в источнике данных или быть соизмерима с ошибкой вычислений в случае вычисляемых значений. Я считаю, что БД не обязана производить вычисления с высокой точностью. Цель БД - хранить данные. Как вывод, бессмысленно хранить числа, оцениваемая точность которых выходит за рамки последней цифры после запятой. Для это лучше всего использовать тип numeric(x,y). При проведении вычислений всегда можно преобразовать такую величину в float и произвести необходимые расчеты.
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35421475
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-Любитель пишет:

> Проценты надо хранить с ооо-о-о-очень длинным хвостом. Иначе вы в сумме
> 100 не получите.

Не правда. Именно с хвостом-то вы и не получите 100%.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35421488
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
davydoff пишет:
> Есть столбец, содержащий проценты (0% - 100%) с 2-мя знаками после
> запятой (пример, 90.56%). Мне интересно узнать, какой тип данных лучше
> всего использовать для такого столбца - точные (к примеру, decimal(5,2)
> или типы данных с приближенным представлением чисел, например, float.

Это зависит исключительно от того, как эти данные используются.
Например, если это - процент НДС или какого-то еще налога, и все это
используется в бухгалтерии, то нужна точная арифметика и decimal/numeric.
Если же это напр. статистическая программа, обсчитывающая например какой=то
опрос населения, то наоборот, лучше плавающая арифметика.

А как ты это используешь, знаешь только ты сам.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Что лучше: float vs numeric(5,2)
    #35440224
davydoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжение топика (для Sybase ASE 12.X) - здесь
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Что лучше: float vs numeric(5,2)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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