Текущий архив: 2005.07.11;
Скачать: CL | DM;
Внизотображение FLOAT Найти похожие ветки
← →
yk © (2005-05-25 10:33) [0]Уважаемые Мастера!
Простите за нескромный вопрос,
как можно задать в запросе точность float до определённого знака?
например я выбираю цены товаров, и у меня в таблице выводятся
числа типа 45,3406768456, а мне надо только 45,34
(т.е. 45 руб 34 коп)
Заранее спасибо :)
← →
Johnmen © (2005-05-25 10:36) [1]DisplayFormat
Дл общего развития очень полезно http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/reals.htm
Тип float не использовать, читать ibase.ru
← →
msguns © (2005-05-25 10:43) [2]Не надо лапать сервер без надобности. Достаточно округлять на клиенте (TFiedd.DisplayFormat)
Использование float без необходимости приводит к непредсказуемым результатам (см.Johnmen © (25.05.05 10:36) [1])
← →
yk © (2005-05-25 10:45) [3]
> Johnmen ©
> читать ibase.ru
ЭТО?
Не надо использовать тип FLOAT
этот тип данных имеет длину 4 байта и точность всего 7 цифр. Эквивалентом в Delphi является single. Если хотите использовать вещественные числа, то сначала попробуйте перемножить и поделить два таких числа прямо в Delphi - так вы увидите точность вычислений, что исключит впоследствии проблемы с хранением и обработкой таких данных в базе.
Т.е. 45 руб 35 коп хранить как 4535 -integer,
а 13 руб 00 коп как 1300 -integer ?
А как тогда выводить правильно результат запроса цена в рублях?
Что бы в таблице отображалось на 4534 ,а 45,34 ?
← →
yk © (2005-05-25 10:47) [4]
> msguns ©
> Достаточно округлять на клиенте
Как ?
Результат запроса у меня идёт в DBGrid. Или я что-то не понимаю? 8(
← →
Johnmen © (2005-05-25 10:53) [5]>yk © (25.05.05 10:45) [3]
Надо чётко разделять такие понятия, как "хранение/вычисление" и "отображение". Они никак, по большому счёту, не связаны.
Как хранить - ещё раз, читай ibase.ru
← →
yk © (2005-05-25 10:58) [6]
> читай ibase.ru
Это я распечатю и повешу на стену!
Действительно - там всё написано :)
http://www.ibase.ru/devinfo/round.htm
> Надо чётко разделять такие понятия, как "хранение/вычисление"
> и "отображение".
Вы абсолютно правы
← →
evvcom © (2005-05-25 11:01) [7]
> Результат запроса у меня идёт в DBGrid. Или я что-то не
> понимаю?
Или "не знаю". Есть:
1. TField.OnGetText;
2. Calc-поля в DataSet
← →
yk © (2005-05-25 11:06) [8]
> evvcom ©
Спасибо - обязательно посмотрю, но решила всё-таки перейти на integer, а результат выводить с помощью cast
← →
sniknik © (2005-05-25 11:06) [9]> Т.е. 45 руб 35 коп хранить как 4535 -integer,
> а 13 руб 00 коп как 1300 -integer ?
в принципе правильный подход, для денег самое то, только уже не ново... тип currency(money/или как там в IB денежный тип называется) именно так и реализован, только держит не два знака в псевдодробной части а четыре.
и в дельфях тоже самое.
т.е. используя этот тип добьешся тогоже но без собственных преобразований.
← →
yk © (2005-05-25 11:19) [10]http://www.ibase.ru/devinfo/round.htmNUMERIC(15, 2) или как DECIMAL(15, 2)
????
Как разберусь с этим обязательно напишу что получилось ;)
← →
isasa © (2005-05-25 17:05) [11]>Надо чётко разделять такие понятия, как "хранение/вычисление" >и "отображение". Они никак, по большому счёту, не связаны.
>Если вместо double использовать single (эквивалент FLOAT), то >результат будет еще хуже: -43,9400634765625
Совершенно верно, и поэтому выводить число single, как
-43,9400634765625
мягко выражаясь некорректно
← →
yk © (2005-05-26 08:19) [12]YrikGL !
Мне понравился вариант с decimal(15,2)
Предлагаю перевести цену на этот тип.
Или ты настаиваешь на integer ? (Какие аргументы ?)
Пока буду у себя с decimal работать...
← →
msguns © (2005-05-26 09:14) [13]>yk © (26.05.05 08:19) [12]
>Мне понравился вариант с decimal(15,2)
Если ТМЦ типа автомобилей или недвижимости, то вполне сойдет. Если же может быть мелочевка, то такой вариант рискован, лучше использовать сотые копеек (15,4)
← →
Johnmen © (2005-05-26 09:24) [14]>yk © (26.05.05 08:19) [12]
А что такое decimal(15,2)на самом деле ???
Может я уже давно чего-то не понимаю, вот автор сам нашел на ibase.ru и привел здесь ссылку на статью, отвечающую на все вопросы по данной теме. НО !!! Такое впечатление, что сам он эту статью не читал. Даже по диагонали...:(
← →
Polevi © (2005-05-26 09:45) [15]>msguns © (26.05.05 09:14) [13]
4 тоже может не хватить, у меня (20,8)
← →
yk © (2005-05-26 09:49) [16]
> А что такое decimal(15,2)на самом деле ???
Для "виртуальных" типов данных NUMERIC(precision, scale) и DECIMAL (precision, scale) при объявлении поля анализируется его точность, и IB пытается "втиснуть" его в один из физических типов - в диалекте 1: smallint, integer, float, double precision - в соответствии с указанными precision и scale, в диалекте 3: smallint, integer, in64.
Собственно говоря, я хочу использовать decimal для того, чтобы не совершать преобразования ручками (могу запутаться :( )
Ну в Delphi конечно , если надо делаю RoundTo(num,-2)
← →
yk © (2005-05-26 09:54) [17]
> msguns ©
> Если же может быть мелочевка, то такой вариант рискован,
> лучше использовать сотые копеек (15,4)
Не очень понимаю зачем это :(
Для деления что-ли?
← →
msguns © (2005-05-26 10:55) [18]>Polevi © (26.05.05 09:45) [15]
>4 тоже может не хватить, у меня (20,8)
Зависит от специфики предметной области. На что я и намекнул. Цифра "4" была указана просто как пример
>yk © (26.05.05 09:54) [17]
>Не очень понимаю зачем это :(
Приходная накладная
-------------------------------
..
Пакеты п/э шт: 10000 Цена за 1000: 12-38 Сумма 123-80
Продаются в розницу поштучно. Цена вх.за 1 ед 0-01,238 коп.
Примечание: Вх.цена нужна для насчета дохода от продажи и вообще для бухгалтерии
← →
YK © (2005-05-26 15:53) [19]у меня в проге надо вводить цену за штуку и количество изделий в поставке - итого подсчитывается
(храню цену за 1 шт, а не 1000 )
Может мне тогда особо и не нужны знаки после запятой ?
← →
msguns © (2005-05-26 15:58) [20]>YK © (26.05.05 15:53) [19]
>(храню цену за 1 шт, а не 1000 )
>Может мне тогда особо и не нужны знаки после запятой ?
Пример в [18] приведен как раз для иллюстрации нужности. Читайте ответы вдумчивее ;)
← →
alex_*** (2005-05-26 18:15) [21]у float поля в Delphi есть возможность задать маску для форматирования, насколько помню
← →
msguns © (2005-05-27 09:13) [22]>alex_*** (26.05.05 18:15) [21]
>у float поля в Delphi есть возможность задать маску для форматирования, насколько помню
см [2]
← →
Danilka © (2005-05-27 09:25) [23][12] yk © (26.05.05 08:19)
Правильно тебе понравилось. :))
[15] Polevi © (26.05.05 09:45)
> 4 тоже может не хватить, у меня (20,8)
Для хранения чего, денег??? Ну-ну. Если какой-то коэффициент, например курс валюты, тогда, таки да. Если деньги, то и двух знаков достаточно для хранения, а в вычислениях надо использовать максимум.
Ну, шо, опять холивар? :))
← →
Danilka © (2005-05-27 09:27) [24][18] msguns © (26.05.05 10:55)
Тоже вопрос спорный, но, честно говоря, с тобой по этому поводу надоело спорить. :)))
← →
msguns © (2005-05-27 09:33) [25]>Danilka © (27.05.05 09:27) [24]
>Тоже вопрос спорный, но, честно говоря, с тобой по этому поводу надоело спорить. :)))
Дань, ну кто ж тебя в попу-то колет - спорить ?
Если у тебя не было и нет причин беспокоиться о потери точности - и слава богу, и на здоровье !
Но опять же существуют разные предметные области, где точнось денежных характеристик (цена, сумма, курс и т.д.) может быть и 2, и больше знаков дроби.
Я вообще не вижу тут предмета для спора. Однако на всякий случай советую новичкам: будьте предусмотрительны, помните о законах Мэрфи: если все у вас сегодня хорошо - то в ближайшее время случится что-нибудь непредвиденное, которое все испортит ;)
← →
Danilka © (2005-05-27 09:42) [26][25] msguns © (27.05.05 09:33)
> Но опять же существуют разные предметные области, где точнось
> денежных характеристик (цена, сумма, курс и т.д.) может
> быть и 2, и больше знаков дроби.
С этим согласен, за исключением того, что курс не является деньгами, а является коэффициентом.
Но с предыдущим твоми примером не совсем согласен - бухгалтерия все равно себестоимость партии будет списывать с точностью до двух знаков и дофига народу работает в 1с-ке и не жужжит по поводу точности 2 знака, и гвоздями успешно торгует. :)
Но, конечно, постановка она разная может быть и требования разные.
← →
msguns © (2005-05-27 10:46) [27]>Danilka © (27.05.05 09:42) [26]
>за исключением того, что курс не является деньгами, а является коэффициентом.
А тебе не приходило в голову, что валютный курс - это та же цена. Только денег ?
← →
Danilka © (2005-05-27 10:53) [28][27] msguns © (27.05.05 10:46)
> А тебе не приходило в голову, что валютный курс - это та
> же цена. Только денег ?
Хм, по-моему все-таки нет. На мой взгляд, это не цена, а безразмерный коэффициент, такой-же как и количество. Когда умножаем или делим что-то на безразмерный коэффициент, получаем ту-же размерность, что была ранее. Умножаем деньги на ко-во - получаем деньги. Умножаем деньги на курс - получаем деньги.
:)
← →
Danilka © (2005-05-27 10:56) [29]хотя нет, не безразмерный: были рубли, стали доллары, но тем не менее - коэффициент.
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.042 c