![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Округление и 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]Посмотреть формат ячейки в экселе, возможно.