Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Округление и Excel [D7, 2000, XP]


ViktorZ ©   (2006-05-05 20:25:00) 

При передаче данных из запроса в Ексель данные округляются, то есть 166,6 становится 167. При больших числах это влияет на результат. Вопрос как убрать округление. При этом же запросе в Грид попадают данные не округленные(сам проверял).


ViktorZ   (2006-05-06 16:39:00) [1]

Да код собственно стандартный.

mainq1.Close;
 mainq1.SQL.Clear;
mainq1.SQL.Text:='SELECT C.Name, P.CArdCode, P.SUMMA  ,P.OST,' +
' SUM( P.OST + P.SUMMA) ,P.SkidkaSumma  ,P.SkidkaOST , ' +
' SUM(P.SkidkaSumma + P.skidkaOST)  FROm ":SEN:Final" P,":SEN:Cards" C WHERE '+
' C.Card=P.cardCode Group By c.Name,P.cardCode,P.OST , P.SUMMA  ,P.SkidkaOST ,'+
' P.SkidkaSumma ORDER By CArdCode';
mainq1.Open;

XL:= CreateOleObject('Excel.Application');
XL.WorkBooks.Add;
Sheet:= XL.ActiveWorkBook.Sheets[1];
Sheet.PageSetup.Orientation:= 2; //===Книжная ориентация===
Sheet.Name:= 'Лист № 1';
Sheet.Columns[1].ColumnWidth:= 35;
Sheet.Columns[2].ColumnWidth:= 7;
Sheet.Columns[3].ColumnWidth:= 10;
Sheet.Columns[4].ColumnWidth:= 15;
Sheet.Columns[5].ColumnWidth:= 15;
Sheet.Columns[6].ColumnWidth:= 15;
Sheet.Columns[7].ColumnWidth:= 18;
Sheet.Columns[8].ColumnWidth:= 10;

//  Итого:
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]].Merge(false);
Sheet.Range[Sheet.Cells[3,3],Sheet.Cells[3,3]]:= 'Cумма по категории:';
// Итого:
 //  Сумма по категории:
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]].Merge(false);
Sheet.Range[Sheet.Cells[3,4],Sheet.Cells[3,4]]:= 'Сумма по остальному:';

//  Сумма по остальным блюдам:

Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]].Merge(false);
Sheet.Range[Sheet.Cells[3,5],Sheet.Cells[3,5]]:= 'Итого:';

//  Скидка по категории:

Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]].Merge(false);
Sheet.Range[Sheet.Cells[3,6],Sheet.Cells[3,6]]:= 'Скидка по категории('+ skpocat.Text +'%):';

//  Скидка по остальному:

Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]].Merge(false);
Sheet.Range[Sheet.Cells[3,7],Sheet.Cells[3,7]]:= 'Скидка по остальному('+ skpoost.Text +'%):';

//  Сумма по остальным блюдам:

Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]].HorizontalAlignment:= 3;
Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]].VerticalAlignment:= 2;
Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]].WrapText:= true;
Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]].Font.FontStyle:= 'Полужирный';
Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]].Merge(false);
Sheet.Range[Sheet.Cells[3,8],Sheet.Cells[3,8]]:= 'Итого по Скидкам:';
i:= 4;
mainq1.First;
while not mainq1.Eof do
begin
Sheet.Cells[i,1]:= mainq1.Fields[0].AsString ;
Sheet.Cells[i,2]:= mainq1.Fields[1].Asinteger;
Sheet.Cells[i,3]:= mainq1.Fields[2].Asinteger;
Sheet.Cells[i,4]:= mainq1.Fields[3].AsInteger;
Sheet.Cells[i,5]:= mainq1.Fields[4].Asinteger;
Sheet.Cells[i,6]:= mainq1.Fields[5].AsInteger;
Sheet.Cells[i,7]:= mainq1.Fields[6].AsInteger;
Sheet.Cells[i,8]:= mainq1.Fields[7].AsInteger;
inc(i);
mainq1.Next;
end;
XL.Visible:= true;
Sheet:= UnAssigned;
XL:= UnAssigned;
end;


ЮЮ   (2006-05-06 10:07:00) [2]

Из грида в Ехеl данные попадают, очевидно, волшебным образом. Тогда тебе - на форум волшебников. А здесь - без кода помочь очень сложно


ViktorZ   (2006-05-06 08:22:00) [3]


> вероятно, имелось ввиду большое количество чисел, или действий
> с числами, или большое количество знаков после запятой..
> .или что-нить еще.
>

Вообще эти числа суммы бонусов, поэтому чем больше число тем больше клиент теряет(получает). Там в принципе вопрос точности до рубля, но нужно.


> При больших числах это влияет на результат

Не подумал, при больших числах это влияет на результат также как и при малых.
12345,6=12346 - то есть округляет до рубля.


Лшдлуттнсфе   (2006-05-05 20:42:00) [4]


> Anatoly Podgoretsky ©   (05.05.06 20:37)


вероятно, имелось ввиду большое количество чисел, или действий с числами, или большое количество знаков после запятой...или что-нить еще.


Anatoly Podgoretsky   (2006-05-05 20:37:00) [5]

Какие это большие, что 10^15 не хватает?


ЛшдлуттнСфе   (2006-05-05 20:27:00) [6]

Посмотреть формат ячейки в экселе, возможно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо