Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.027 c
14-1118446282
Piter
2005-06-11 03:31
2005.07.11
Помогите определить что за песня


9-1112037257
Trimp
2005-03-28 23:14
2005.07.11
Antialiasing


14-1118415727
default
2005-06-10 19:02
2005.07.11
Пятничная задачка


1-1118399490
Nike
2005-06-10 14:31
2005.07.11
Привязка курсора мыши к контролам на форме


1-1119361374
Alex17
2005-06-21 17:42
2005.07.11
Фаил