Форум по 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:17
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

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

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

P.S. За упрощённое объяснение не пинать!
Ответить с цитированием
  #7  
Старый 11.09.2007, 10:13
Elv Elv вне форума
Прохожий
 
Регистрация: 11.09.2007
Сообщения: 17
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Вообще-то, пользователь сумму НДС и не должен руками вводить, она должна рассчитываться относительно установленной процентной ставки и никак иначе. Следовательно ничего проверять и не нужно. UlarSoft учите бухучет.
Кто чего должен, клиентам не расскажешь. Если оперу в банк принесли платёжку, опер обязан выполнить проверку. Оперу не ведомо, каким образом НДС расчитали.
Ответить с цитированием
  #8  
Старый 11.09.2007, 11:31
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

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


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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