|
|
|
Что лучше: 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 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35414388&tid=1543763]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 350ms |

| 0 / 0 |
