Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Вниз

Округление в IB6   Найти похожие ветки 

 
IvanovSergey   (2002-07-03 13:32) [0]

Запрос

select ...
((ROW_COUNT*ROW_PRICE)-((ROW_COUNT*ROW_PRICE)/(100+ROW_NDS)*ROW_NDS))/ROW_COUNT AS PRICE_WO_NDS,
(ROW_COUNT*ROW_PRICE)-((ROW_COUNT*ROW_PRICE)/(100+ROW_NDS)*ROW_NDS) AS SUM_WO_NDS,
(ROW_COUNT*ROW_PRICE)/(100+ROW_NDS)*ROW_NDS AS SUM_NDS,
(ROW_COUNT*ROW_PRICE) AS SUM_TOTAL,

PRICE_WO_NDS при расчете не округляется а отбрасывется дробная часть.

Как побороть?


 
Johnmen   (2002-07-03 13:40) [1]

А как это было определено ?


 
IvanovSergey   (2002-07-03 14:15) [2]

2 Johnmen:

C аналогичным расчетом в старой программе не совпало.
Я стал проверять с реальными числами
((20*9,16)-((20*9,16)/(100+20)*20))/20 AS PRICE_WO_NDS
(183,20-(183,20/120*20))/20 AS PRICE_WO_NDS
(183,20-( 1,52*20))/20 AS PRICE_WO_NDS если отбросить дробную часть
(183,20-( 1,53*20))/20 AS PRICE_WO_NDS если округлить дробную часть


 
Val   (2002-07-03 14:24) [3]

как вы смотрите результаты запроса?


 
IvanovSergey   (2002-07-03 14:29) [4]

2 Val:
ibConsole, а эксперименты с цифрами уже в excel, а что?


 
IvanovSergey   (2002-07-03 14:34) [5]

2 Val:
ibConsole, а эксперименты с цифрами уже в excel, а что?


 
Val   (2002-07-03 14:36) [6]

, а что?
было подозрение на округление уже приложением.
как у вас объявлены типы?


 
IvanovSergey   (2002-07-03 19:01) [7]


в таблице

"ROW_COUNT" INTEGER NOT NULL,
"ROW_PRICE" NUMERIC(9, 2) NOT NULL,

С уважением Иванов Сергей


 
kaif   (2002-07-03 20:40) [8]

По вашему, если цена без НДС будет округляться правильно, это избавит от остальных проблем? На знаю, какой идиот придумал все эти НДС, но я Вам вот, что скажу. Если не отталкиваться от цены без НДС изначально, то ни при каких условиях навозможно получить правильный счет-фактуру если не заложить все цены кратными 6. Одним словом, задача расчета цены без НДС на основе цены (или суммы) с НДС обречена на провал, если не использовать плавающий тип (FLOAT или DOUBLE PRECISION) и не выводить 4 знака после запятой. Типа цена 123.1234 рубля. Пускай потом в налоговой радуются на свое изобретение...


 
Alexandr   (2002-07-04 06:36) [9]

нет.
Просто менеджерам объясняют, что если они хотят работать с ценой с НДС, то эта цена будет приблизительной.
Т.е. программа сразу из этой цены получаент цену без НДС, округляет до копеек, а потом опять получает цену с НДС и это будет уже правильная цена с НДС, о чем менеджера и предупреждают.

Все остальные варианты( типа 4 знаков в копейках, изменения формы СФ зарубятся ГНИ, да еще и штраф выпишут)



 
Johnmen   (2002-07-04 09:53) [10]

1.
NUMERIC(9, 2) - на самом деле integer (см.доки)
2.
>kaif © (03.07.02 20:40)
>Alexandr © (04.07.02 06:36)

Оба правы, оба подхода правомочны, я исповедую с несколькими вариациями Alexandr © (04.07.02 06:36)


 
IvanovSergey   (2002-07-04 10:30) [11]

Про все эти приколы с кратностью я знаю, все размышления на эту тему свелись к следующему принципу: расчеты программы должны совпадать с расчетами на калькуляторе иначе ни какие доводы про машинную арифметику не работают. Потому как "я не знаю как у вас оно там щитает, а вот у _меня_ правильно".
Был, кстати такой случай с четырьмя знаками после запятой, уперлась тетка в райпо - так я ей в екселе счет рисовал.

Так numeric использовать нельзя, что ли? А что использовать?
Ну и все равно это не правильно. Если (9.2) то почему он его обрабатывает как (9.0)?


 
Johnmen   (2002-07-04 10:38) [12]

>IvanovSergey

Я думаю твоя проблема из-зи того, что происходит неявное приведение типов в запросе : т.к. все переменные выражения целочисленны, то и результат предполагается integer.

Попробуй привести результат к float с пом.CAST.


 
Alexandr   (2002-07-04 10:42) [13]

2Johnmen: У меня бухгалтер отверг начисто все подходы в том числе и с 4 знаками после запятой. Однозначно сославшись на налоговую инспекцию и требования наших клиентов.
А тот вариант, который я тут написал вот уже давно очень работает и нареканий не было совершенно.


 
Alexandr   (2002-07-04 10:46) [14]

Да и насчет целочисленных операндов и целочисленного результата
именно так.

В доке на этот счет написано было...
Да еще и от диалекта зависит

Вообщем после долгих мучений с Numeric, хранением денег и прочим.
Я пришел к выводу что достаточно иметь Integer и double чтобы спать спокойно, а все эти нумерики забыть как дурной сон.


 
Johnmen   (2002-07-04 10:56) [15]

>Alexandr © (04.07.02 10:46)
>достаточно иметь Integer и double чтобы спать спокойно

Полностью согласен. Хотя можно иметь и Integer и Numeric(15,2)



 
IvanovSergey   (2002-07-04 11:45) [16]

Все получилось. Кажется...

седующая запись возвращает требуемый результат:

(ROW_COUNT*cast(ROW_PRICE as FLOAT))/(100+ROW_NDS)*ROW_NDS AS SUM_NDS


Спасибо.
С уважением Иванов Сергей.
Читайте Доки - очень полезно!


 
Alexandr   (2002-07-04 11:47) [17]

ну еще бы.
Насчет документации это ты верно подметил...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-81160
DmitryN
2002-07-04 08:09
2002.07.25
Delphi+MS SQL+SQLDMO


7-81491
Дмитрий К.
2002-05-03 16:58
2002.07.25
Как организовать опрос портов LPT1 и Com?


3-81195
Prog_mail
2002-07-02 15:51
2002.07.25
Как


1-81258
Alex_win
2002-07-15 09:19
2002.07.25
версия фала


1-81302
Katerina
2002-07-09 09:04
2002.07.25
Кто-нибудь сталкивался с такой проблемой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский