powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Неприятные особенности типа Money
7 сообщений из 7, страница 1 из 1
Неприятные особенности типа Money
    #32285661
Ezhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, имеется таблица, содержащая сведения о денежных начислениях группе сотрудников, т.н. "наряд". Нужно раскрутить на всех некую премию, разбив ее пропорционально уже имеющимся в таблице сведениям. Для этого запускается Update, который успешно отрабатывает. Все бы ничего, но поля для хранения народных финансов я соблазнился сделать типа Money. В результате получается вот какой казус: работающий после всего этого отчет утверждает, что сумма по столбцу "Премия" как раз равна значению, которое мы "раскручивали", а если посчитать ручками, то НЕТ (причем не всегда). Т.е. если хотели разбить 111.11 руб. на троих, то что-то типа:
Премия
1-й 11,17
2-й 65,36
3-й 34,59
--------
111,11
А на самом деле 11,17+65,36+34,59=111,12 руб !
Разница всего на копейку, однако неприятно. Оказалось , что сумма в отчете ВЕРНА, т.к. злой комп складывает не те значения типа Money, которые коварно отображаются в гриде и отчете, а нечто с 3-5 знаками после запятой, скрывающееся под их личиной (я привел Money к Str и убедился в этом).
Вопрос: как ФОРМАТИРОВАТЬ результат Update? Если никак, то какое существует надежное решение для округления значений нужного поля до N знаков?
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32285692
dragonx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pozdravlyu !!!
Ybedi buxgaltera, chto eto neizbejno ili
pishesh eshe odnu proceduru
posle formirovaniya otcheta, tebe pridetsya yznat` summu, na kotoruu "ne iidet"
otchet, podelit` ee mejdu ichastnikami proporcionalno ix premiyam, i otnyat` y nix etu summu.
ya v svoe vremya ybil ne odin chas chto bi ob`yasnit` glavnomu buxgalteru, chto
3.5 + 5.5 <> Round(3.5) + Round(5.5)
udachi ;))
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32285693
dragonx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v tvoem sluchae nado y
2-й 65,36 otnyat` 1 kopeiku ;) potomu,
chto y nego samaya bolshaya premiya ;)) delitsya nado
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32286912
Ezhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том и фишка, чтобы узнать ту самую "разницу" между тем, что отображается и что есть на самом деле. Select sum("Премия") все те же 111.11 руб. :(
Дополнительный вопрос в тему : можно ли не используя механизм фильтров провести несколько действий с КАЖДОЙ из удовлетворяющей определнному условию записей? (Если угодно, аналог scan...endscan в FoxPro).
P.S. dragonx, а round так,как ты упомянул работает в фоксе, в Delphi он вроде бы округляет до целого. Ты что, тоже родом из фокса ?
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32288210
Ezhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мэтры, неужто же Delphi не дает возможности нормально округлять народные деньги ???
В принципе, возможна цепочка CurrToStr-StrToFloat-FloatToStrF(до 2 знаков)-StrToCurr, но ведь это же извращение !
К тому же опять как без фильтров, попроще, надругаться таким образом над каждой записью, для которой раскручивали премию (ведь update применяется НЕ КО ВСЕЙ таблице, а к некоторой ее части).
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32289428
Ezhov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не дождамшись ответа, сделал так:
1)поставил Number вместо Money
2)использовал фильтр вместо запроса
3)пробежал по отфильтрованной таблице после раскрутки премии и
преобразовал поле с премией так: bufer:=FloatToStrF(Prem,ffFixed,9,2), а затем Prem.Value:=StrToFloat(bufer).
И стало мне счастье.
...
Рейтинг: 0 / 0
Неприятные особенности типа Money
    #32290633
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ezhov писал:имеется таблица, содержащая сведения о денежных начислениях группе сотрудников, т.н. "наряд". Нужно раскрутить на всех некую премию, разбив ее пропорционально уже имеющимся в таблице сведениям. Для этого запускается Update, который успешно отрабатывает. Все бы ничего, но поля для хранения народных финансов я соблазнился сделать типа Money.

Это где у тебя таблица-то?
Что-то я не нашел в Дельфях тип Money
Ezhov писал:т.к. злой комп складывает не те значения типа Money, которые коварно отображаются в гриде и отчете, а нечто с 3-5 знаками после запятой, скрывающееся под их личиной (я привел Money к Str и убедился в этом).

И откуда там такие значения? Как ты премию-то делишь? Может оттуда они и получаются? Потому как только во float вместо 5 может лежать 4.99999999999, а все остальные работают точно

-- Tygra's --
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Неприятные особенности типа Money
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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