Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.09.2007, 13:52
UlarSoft UlarSoft вне форума
Прохожий
 
Регистрация: 10.09.2007
Сообщения: 17
Репутация: 10
Злость Сравнение дробных чисел.

Уважаемые специалисты.
Я работаю с компонентом DBGridEh, а база данных в SQL. На форме расположен DBGridEh, через ADO подключаюсь к БД. Я пишу счет-фактуру на Дельфи. Пользователи вводять вручную кол-во, цена, сумма, сумма НДС, всего (товара). При вводе я должен проверит правильно ли они набрали, н-р сумму НДС. Делаю следующий код:
if (qTovar.FieldByName('NDS').AsFloat<>0) //Если не ноль
and (Key=#13) then
begin
qSprNds.Open; //открытие справочника НДС
if Round((qTovar.FieldByName('SUMMA').AsFloat *
qSprNds.FieldByName('STAVKA').AsFloat/100)*100)/100<>
qTovar.FieldByName('NDS').AsFloat then //СРАВНЕНИЕ
begin

ExB:=MessageBox(handle,pchar('Не правильна подсчитана сумма НДС !!!'+#13+#10+''+
'Правильная сумма НДС = '+FloattoStr(Round((qTovar.FieldByName('SUMMA').As Float *
qSprNds.FieldByName('STAVKA').AsFloat/100)*100)/100)+
#13+#10+''),pchar('Ошибка ...'),48);
qTovar.FieldByName('NDS').AsFloat :=0;//Присваиваю ноль
end;
if Exb=IDOK then
end;

Если кол=1, цена=100.56, сумма=100.56, то должен быть НДС(4%)=4.0224
Когда я набираю на компе т.е. в ячейке 4,0224 копм ругается. Помогите плиииз, очень надо. Уже четвертый день у меня ничего не получается.
Ответить с цитированием
  #2  
Старый 10.09.2007, 15:33
Аватар для moo2k
moo2k moo2k вне форума
Активный
 
Регистрация: 05.12.2006
Адрес: где-то там...
Сообщения: 321
Репутация: 35
Злость

Напиши текст ошибки или код ошибки. Нужно больше инф.
Или попробуй
Код:
try..except или try..finally
Ответить с цитированием
  #3  
Старый 11.09.2007, 06:26
UlarSoft UlarSoft вне форума
Прохожий
 
Регистрация: 10.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Мне нужно проверить "Сумму НДС" (20%), "Сумму НП" (4%) и Итоговую сумму... А их набирают пользователи вручную... Я должен автоматически проверить введенные данные т.е. проверить пользователя...
Правильно ли он набрал "Сумму НДС" (20%), "Сумму НП" (4%) и Итоговую сумму... или не правильно. Если пользователь не правильно посчитал, тогда будет сообщение с правильными суммами...
Вот когда я сравниваю с округлением:
if Round((qTovar.FieldByName('SUMMA').AsFloat *
qSprNds.FieldByName('STAVKA').AsFloat/100)*100)/100<>
qTovar.FieldByName('NDS').AsFloat then
т.е. "сумма" * "ставка НДС" <> "сумма НДС", где "сумма" * "ставка НДС" - считает комп, "сумма НДС" - вводить пользователь в ячейку "Сумма НДС" в гриде... Ошибка: При сравнении не совподает вариант пользователя с машинным вариантом, т.е. если количество=1, цена=100,56 тогда сумма=100,56. А Сумма НДС: Вариант пользователя - 20,11. Вариант компа=20,11 Сумма не совподает.
Ответить с цитированием
  #4  
Старый 11.09.2007, 06:31
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Вообще-то, пользователь сумму НДС и не должен руками вводить, она должна рассчитываться относительно установленной процентной ставки и никак иначе. Следовательно ничего проверять и не нужно. UlarSoft учите бухучет.
Ответить с цитированием
  #5  
Старый 11.09.2007, 06:52
UlarSoft UlarSoft вне форума
Прохожий
 
Регистрация: 10.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Aristarh Dark, Вы обсолютно правы, но требуют, чтобы была проверка... А счет-фактура введется полностью вручную...
Ответить с цитированием
  #6  
Старый 11.09.2007, 10:13
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Вообще-то, пользователь сумму НДС и не должен руками вводить, она должна рассчитываться относительно установленной процентной ставки и никак иначе. Следовательно ничего проверять и не нужно. UlarSoft учите бухучет.
Кто чего должен, клиентам не расскажешь. Если оперу в банк принесли платёжку, опер обязан выполнить проверку. Оперу не ведомо, каким образом НДС расчитали.
Ответить с цитированием
  #7  
Старый 11.09.2007, 10:17
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от UlarSoft
Aristarh Dark, Вы обсолютно правы, но требуют, чтобы была проверка... А счет-фактура введется полностью вручную...
Умножь на 100. Отбрось дробную часть и сравни. Сравнивать числа с плавающей запятой нельзя. У них точность до заявленого знака. То есть
100,56 на самом деле 100,560000000001 или 100,5599999999.

Что касается ошибки, очень похоже, что разделитель дробной части у тебя в одном случае ".", а в другом ",".

P.S. За упрощённое объяснение не пинать!
Ответить с цитированием
  #8  
Старый 11.09.2007, 11:31
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Elv
Кто чего должен, клиентам не расскажешь. Если оперу в банк принесли платёжку, опер обязан выполнить проверку. Оперу не ведомо, каким образом НДС расчитали.
Поспорю. Пример прост: даете клиенту возможность вводить НДС руками, он пишет что-попало, а потом, когда ревизор или кто-то подобный его начинает за это наказывать ссылается на вас: "Это фирма "NNN" мне так сделала".
Ответить с цитированием
  #9  
Старый 12.09.2007, 17:54
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Поспорю. Пример прост: даете клиенту возможность вводить НДС руками, он пишет что-попало,
А чего спорить? Задача у UlarSoft'а не первичный набор документов, а последконтроль.

Цитата:
Сообщение от Aristarh Dark
а потом, когда ревизор или кто-то подобный его начинает за это наказывать ссылается на вас: "Это фирма "NNN" мне так сделала".
А это проверяющего меньше всего беспокоит. Ответственость несёт тот, кто подписал и поставил печать.
Ответить с цитированием
  #10  
Старый 13.09.2007, 07:05
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Elv, я не стану разводить флуд в данной теме. Если интересно мое мнение (а оно подкреплено большим опытом работы с клиентами) по поводу подобных нестыковок милости просим в личку.
Ответить с цитированием
  #11  
Старый 13.09.2007, 10:26
UlarSoft UlarSoft вне форума
Прохожий
 
Регистрация: 10.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Ребята, у меня получилась. Огромное спасибо за помощь...
Ответить с цитированием
  #12  
Старый 14.09.2007, 08:47
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Elv, я не стану разводить флуд в данной теме. Если интересно мое мнение (а оно подкреплено большим опытом работы с клиентами) по поводу подобных нестыковок милости просим в личку.
Не хочешь разводить флуд - не начинай. В т.ч. и это своё письмо мог бы написать мне в личку.

Человек спросил, как сравнить два Double. Он не просил общих рассуждений, как это должно быть.

Если ты имеешь опыт, ты знаешь, что часто, по разным причинам, приходится решать задачу через ж. Лично я не считаю себя вправе давать совет об организации работы UlarSoft'у, так как я ничего не знаю о стоящей перед ним задаче. Из письма UlarSoft'а видно, что он работает с распечаткой документа, то есть не UlarSoft, порождает документ.

Что касается твоего опыта, я бы с удовольствием поучился. Думаю, будет отличной идеей создать отдельную ветку, где ты бы смог поделиться опытом.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025