|
|
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги Есть столбец, содержащий проценты (0% - 100%) с 2-мя знаками после запятой (пример, 90.56%). Мне интересно узнать, какой тип данных лучше всего использовать для такого столбца - точные (к примеру, decimal(5,2) или типы данных с приближенным представлением чисел, например, float. Я склоняюсь использовать decimal(5.2) - (1) точное представление числа, (2) - дополнительное естественное ограничение на диапазон числа. Вопрос достаточно общий, но на всякий случай - использую Sybase ASE 12.5 Спасибо, Виталий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2008, 20:33 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Проценты надо хранить с ооо-о-о-очень длинным хвостом. Иначе вы в сумме 100 не получите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 11:59 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. Но с float тоже можно не получить 100%. По-моему, надежнее использовать numeric и перед загрузкой данных корректировать проценты, если сумма не соответствует 100%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 12:46 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
davydoffНо с float тоже можно не получить 100% Верно. Ни один способ этого не гарантирует. davydoffПо-моему, надежнее использовать numeric Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 14:10 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Я имел в виду, что чем длиннее хвост - тем лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 15:09 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительЯ имел в виду, что чем длиннее хвост - тем лучше. Кому лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 15:44 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Лучше - расчетам, которые будут делаться с этими процентами, как исходными аргументами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 15:51 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Лучше последующим расчетам, которые будут проводиться с этими процентами, как с исходными данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 15:55 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Извините, что-то у меня реплика "не проявилась". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 15:56 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительЛучше - расчетам, которые будут делаться с этими процентами, как исходными аргументами. Вообще-то По-моему, надежнее использовать numeric и перед загрузкой данных корректировать проценты, если сумма не соответствует 100%. В случае float-ов теоретически можно не получить 100% даже после подобной корректировки, все равно придется округление использовать. ДА и не вижу я у автора задачи хранить значение с максимальной точностью. Хотя, вполне может быть, и float спасет автора. У меня, например, коэффициенты (проценты) хранятся по-разному, есть и как numeric, есть и как float, в зависимости от требования к точности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 16:01 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Имхо, float следует по-возможности избегать. Чревато жестокими засадами - на здешнем форуме, как я помню, не раз поднимались темы связанные с фичами рассчётов с плавающей точкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 16:05 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Есть один аргумент в пользу float и вообще, типов с приближенным представлением числа - если изменяется формат, то не придется в этом случае менять тип столбца. А минусы очевидны - платформенно-зависим (по крайней мере на ASE 12.5), содержит больше ненужных значащих цифр (в том числе ненужный хвост), чем тип с точным представлением. Я считаю, что данные в БД должны быть представлены точно. Если производятся какие-то вычисления, то пожалуйста, преобразовывай тип в любой другой и проводи вычисления с преобразованным числом. Задача БД - не вычислять, а хранить данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 16:28 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
davydoffЯ считаю, что данные в БД должны быть представлены точно. Если производятся какие-то вычисления, то пожалуйста, преобразовывай тип в любой другой и проводи вычисления с преобразованным числом. Задача БД - не вычислять, а хранить данные. Для хранения 1/3 предлагаете ограничить точность, или хранить отдельно числитель и знаменатель? А для pi? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 17:10 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Имхо, зависит от природы данных. Если количество знаков после запятой всегда не больше двух, то можно вообще хранить в целочисленном типе данных. Т.е. вместо 90.56% хранить 9056, а при выводе производить соответствующее форматирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 17:32 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Коллеги, спасибо за обсуждение! Для хранения 1/3 даже float не хватит (и любого другого типа тоже), если хранить это число в десятичной форме. Надо следовать рациональным принципам. Если исходные данные содержат только 2 знака после запятой, то надо использовать тип с точным представлением числа с 2-мя знаками после запятой. Не имеет смысла хранить мусор в БД. Что касается pi - то такую константу не надо хранить в БД, она и так известна. Согласен с miksoft, что это зависит от природы данных. Если данные изначально поставляются с 2-мя знаками после запятой, то наверно не стоит для этого использовать float. Что касается хранения в целочисленном виде - не согласен. Иначе во всех местах придется реализовывать алгоритм преобразования целочисленных данных в нужную, читабельную форму. numeric(A,B) , как мне кажется, решает эту задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 17:46 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
davydoffЧто касается pi - то такую константу не надо хранить в БД, она и так известна Я в шоке. Кому известна? А если необходима большая точность, чем обеспечивается стандартной функцией в БД? Да и ясно было, что речь идет о любом иррациональном числе, хоть синусы храните, коть корни - пофигу, все равно Ваш тезис рассыпается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 17:49 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов davydoffЧто касается pi - то такую константу не надо хранить в БД, она и так известна Я в шоке. Кому известна? А если необходима большая точность, чем обеспечивается стандартной функцией в БД? Да и ясно было, что речь идет о любом иррациональном числе, хоть синусы храните, коть корни - пофигу, все равно Ваш тезис рассыпается. 1. Мне. 3.14159265 2. Надо использовать другое средство для вычислений 3. В платежных системах нет иррациональных чисел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2008, 23:54 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
ИМХО, с точки зрения производительности лучше всего использовать int, умножая проценты на 100, а потом деля. Но это может усложнить логику процедур и/ли клиента... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2008, 10:27 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
В платежных системах иррациональные числа нет-нет да и проскакивают. Я сталкивался с ними при сложных расчетах с разными валютами, пересетами по курсам валют, при пропорциональном разнесении сумм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 09:01 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Программист-ЛюбительВ платежных системах иррациональные числа нет-нет да и проскакивают. Я сталкивался с ними при сложных расчетах с разными валютами, пересетами по курсам валют, при пропорциональном разнесении сумм. То, что иррациональный числа проскакивают в процессе расчета, говорит лишь о том, что используется неверный алгоритм. В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них. Единственный случай, который я не знаю, как считать - это аннуитетная схема. Но, вроде как, работает, значит можно рассчитать и ее. А проблемы с "хвостами" при пересчете курсов валют никаким увеличением точности не решить. И решается это путем отнесения "лишних" копеек в "специально отведенное" место. Вопрос лишь в правильном выборе момента этого отнесения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 10:46 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них. Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 11:13 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них. Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит... И чего он стоит? Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают. И все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 00:23 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Николай1 miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них. Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит... И чего он стоит? Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают. И все. Много стоит :) Если система в расчете будет ограничена 2-мя знаками после запятой (точность - копейка), то от метода расчета сумма НДС будет плавать. Например возьмите n-е количество одного товара, умножте на стоимость и подсчитайте НДС. И так же можно подсчитать НДС одного товара и умножить на количество - суммы будут разные. Сам знаю довольно распространенную систему - которая так делает (хранит в одном месте НДС каждого товара с точностью до копейки, а вдругом - групповую НДС с тойже точностью и при этом суммы разные) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 07:07 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Надеюсь понятно описал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 07:09 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Алымов Анатолий Николай1 miksoft Николай1В итогах никаких иррациональных чисел нет, следовательно и в процессе расчета следует обходиться без них. Единственный случай, который я не знаю, как считать - это аннуитетная схема.Ну это далеко не единственный случай, когда возникают суммы денег с бесконечным количеством знаков после запятой (кстати, обычно возникают рациональные числа, а не иррациональные). Один только НДС чего стоит... И чего он стоит? Как я помню из практики, кесарю отдают кесарево, а у себя эту копейку от души отрывают. И все. Много стоит :) Если система в расчете будет ограничена 2-мя знаками после запятой (точность - копейка), то от метода расчета сумма НДС будет плавать. Например возьмите n-е количество одного товара, умножте на стоимость и подсчитайте НДС. И так же можно подсчитать НДС одного товара и умножить на количество - суммы будут разные. Сам знаю довольно распространенную систему - которая так делает (хранит в одном месте НДС каждого товара с точностью до копейки, а вдругом - групповую НДС с тойже точностью и при этом суммы разные) :) И в чем тут проблема? Все зависит от требований учета. Если учет требует отчета по каждому товару, то так и надо считать. По каждому отдельно. А по всем сразу - только в справочных целях. Ну, или наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 08:09 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Николай1 И в чем тут проблема? Все зависит от требований учета. Если учет требует отчета по каждому товару, то так и надо считать. По каждому отдельно. А по всем сразу - только в справочных целях. Ну, или наоборот. Это недостатки конкретной системы :) - она применяет разные подходы при расчете НДС (хотя это было бы без разницы, если бы точность расчете при любом методе была выше). В налоговой знаю уже давно в программах ввели точность расчета сумм (денег) до 4-х (может уже и более) после запятой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 10:41 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Погрешность вычислений с плавающий точкой является фундаментальной проблемой. На это всегда надо закладываться при расчетах и особым образом обрабатывать ситуации с лишними или недостающими копейками. Я пришел к выводу, что точность представления числа в БД должна определяться точностью представления величин в источнике данных или быть соизмерима с ошибкой вычислений в случае вычисляемых значений. Я считаю, что БД не обязана производить вычисления с высокой точностью. Цель БД - хранить данные. Как вывод, бессмысленно хранить числа, оцениваемая точность которых выходит за рамки последней цифры после запятой. Для это лучше всего использовать тип numeric(x,y). При проведении вычислений всегда можно преобразовать такую величину в float и произвести необходимые расчеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 11:37 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Программист-Любитель пишет: > Проценты надо хранить с ооо-о-о-очень длинным хвостом. Иначе вы в сумме > 100 не получите. Не правда. Именно с хвостом-то вы и не получите 100%. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2008, 18:21 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
davydoff пишет: > Есть столбец, содержащий проценты (0% - 100%) с 2-мя знаками после > запятой (пример, 90.56%). Мне интересно узнать, какой тип данных лучше > всего использовать для такого столбца - точные (к примеру, decimal(5,2) > или типы данных с приближенным представлением чисел, например, float. Это зависит исключительно от того, как эти данные используются. Например, если это - процент НДС или какого-то еще налога, и все это используется в бухгалтерии, то нужна точная арифметика и decimal/numeric. Если же это напр. статистическая программа, обсчитывающая например какой=то опрос населения, то наоборот, лучше плавающая арифметика. А как ты это используешь, знаешь только ты сам. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2008, 18:24 |
|
||
|
Что лучше: float vs numeric(5,2)
|
|||
|---|---|---|---|
|
#18+
Продолжение топика (для Sybase ASE 12.X) - здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2008, 18:16 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1543763]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 415ms |

| 0 / 0 |
