Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2014, 21:19   #1
ul_mrAlex
Пользователь
 
Регистрация: 01.04.2013
Сообщений: 23
По умолчанию Округление

Не получается сделать округление чисел после запятой до сотых
Код:
uses 
.., Math;
 
....
 
procedure Tglav_index.Button8Click(Sender: TObject);
var a1,a2,a3,a4,a6:real;
    b1,b2,b3,b5,b6:real;
    c1,c2,c3,c4,c6:real;
    sum:real;
begin
 
ADOQuery9.Close;
ADOQuery9.SQL.Clear;
ADOQuery11.Close;
ADOQuery11.SQL.Clear;
ADOQuery9.SQL.Add('SELECT * FROM t_stoimost_uslugi WHERE tip_lico like '''+ '%' +DBEdit33.Text+ '%' +''' AND');
ADOQuery9.SQL.Add('vid_ts like '''+ '%' +DBEdit36.Text+ '%' +'''');
ADOQuery11.SQL.Add('SELECT * FROM t_ozid WHERE tip_lico like '''+ '%' +DBEdit33.Text+ '%' +''' AND');
ADOQuery11.SQL.Add('vid_ts like '''+ '%' +DBEdit36.Text+ '%' +'''');
ADOQuery9.Open;
ADOQuery11.Open;
 
if a2=0 then a3:=0;
a2:=strtofloat(DBEdit18.Text);//цена без НДС экскурсовод
a4:=strtofloat(DBEdit35.Text);//продолжительность экскурсии
a6:=a2*a4;
sum_bez_NDS.Text:=Floattostr(roundto(a6, -2));
//FloatToStrf(a6,ffgeneral,6,2);
a1:=0.18*a6;
NDS.Text:=Floattostr(roundto(a1, -2));
//FloatToStrF(a1,ffFixed,6,2);  //НДС экскурсовод
a3:=a6+a1;  //экскурсовод * продолжительность экскурсии
//stoimost_NDS.Text:=FloatToStrF(a3,ffFixed,6,2);
stoimost_NDS.Text:=Floattostr(roundto(a3, -2));
 
b2:=strtofloat(DBEdit32.Text);//цена без НДС ТС
b5:=strtofloat(DBEdit19.Text);//продолжительность поездки
b6:=b2*b5;
sum_bez_NDS1.Text:= Floattostr(roundto(b6, -2));
//FloatToStrF(b6,ffFixed,6,2);
b1:=0.18*b6;
NDS1.Text:=Floattostr(roundto(b1, -2));
//FloatToStrF(b1,ffFixed,6,2); //НДС стоимость ТС
b3:=b6+b1;
stoimost_NDS1.Text:=Floattostr(roundto(b3, -2));
//FloatToStrF(b3,ffFixed,6,2);
 
if c4=0 then c3:=0;
c2:=strtofloat(DBEdit38.Text);//цена без НДС ожидания
c4:=strtofloat(DBEdit39.Text);//продолжительность ожидания
c6:=c2*c4;
sum_bez_NDS2.Text:=Floattostr(roundto(c6, -2));
//FloatToStrF(c6,ffFixed,6,2);
c1:=c6*0.18;
NDS2.Text:=Floattostr(roundto(c1, -2));
//FloatToStrF(c1,ffFixed,6,2); //НДС стоимость ТС
c3:=c6+c1;
stoimost_NDS2.Text:=Floattostr(roundto(c3, -2));
//FloatToStrF(c3,ffFixed,6,2);
 
sum:=a3+b3+c3;
sum_it.text:=Floattostr(roundto(sum, -2));
//floattostrf(sum,ffFixed,6,2);
 
end;
Считает в итоге 4881,55+410,40+0=5291,96 , когда д.б. 5291,95.

Последний раз редактировалось Stilet; 28.01.2014 в 22:32.
ul_mrAlex вне форума Ответить с цитированием
Старый 28.01.2014, 21:31   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
c6:=c2*c4; 
sum_bez_NDS2.Text:=Floattostr(roundto(c6, -2)); 
//FloatToStrF(c6,ffFixed,6,2); 
c1:=c6*0.18;   //сумму без НДС показываешь округленную, а НДС считаешь не от округленной
NDS2.Text:=Floattostr(roundto(c1, -2));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.01.2014, 08:11   #3
ul_mrAlex
Пользователь
 
Регистрация: 01.04.2013
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
....//сумму без НДС показываешь округленную, а НДС считаешь не от округленной
Простите, маленько не понял, это как?

Последний раз редактировалось ul_mrAlex; 29.01.2014 в 08:22.
ul_mrAlex вне форума Ответить с цитированием
Старый 29.01.2014, 09:33   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Простите, маленько не понял, это как?
Это так:

Получил стоимость без НДС = 2677,7751 округлил и отобразил 2677,78

Считаешь НДС 2677,7751*0,18=481,999518 округлил и отобразил 482,00
а нужно 2677,78*0,18=482,0004 и после округления 482,00 (здесь совпало)

Считаешь стоимость с НДС 2677,7751+481,999518=3159,774618 после округления 3159,77
а нужно 2677,78+482,00=3159,78

в итоге 3159,77 <> 2677,78+482,00
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.01.2014, 10:28   #5
ul_mrAlex
Пользователь
 
Регистрация: 01.04.2013
Сообщений: 23
По умолчанию

Код:
b2:=strtofloat(DBEdit32.Text);//
b5:=strtofloat(DBEdit19.Text);
b6:=b2*b5;
sum_bez_NDS1.Text:= Floattostr(roundto(b6, -2));
b1:=0.18*b6;
b3:=b6+b1;
NDS1.Text:=FloatToStr(roundto(b1, -2)); 
stoimost_NDS1.Text:=Floattostr(roundto(b3, -2));
Это таким образом получается?
ul_mrAlex вне форума Ответить с цитированием
Старый 29.01.2014, 10:31   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
b6:=b2*b5;
sum_bez_NDS1.Text:= Floattostr(roundto(b6, -2));
b1:=0.18*StrToFloat(sum_bez_NDS1.Text);
NDS1.Text:=FloatToStrF(b1,ffFixed,6,2); 
b3:=StrToFloat(sum_bez_NDS1.Text)+StrToFloat(NDS1.Text);
stoimost_NDS1.Text:=Floattostr(roundto(b3, -2));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.01.2014, 10:58   #7
ul_mrAlex
Пользователь
 
Регистрация: 01.04.2013
Сообщений: 23
Смех

Спасибо, разжевали
ul_mrAlex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
округление с++ kop Общие вопросы C/C++ 3 14.05.2011 16:01
Округление Madina192 Microsoft Office Access 6 29.04.2011 12:28
Округление Farmokolog Общие вопросы Delphi 2 19.02.2011 16:08
ОКРУГЛение Андрей_Васильевич Microsoft Office Excel 5 19.10.2009 09:09
округление Toxa Общие вопросы Delphi 4 15.01.2007 19:15