Имя: Пароль:
1C
1С v8
Не работает округление ОКР?
0 Manonegro
 
12.03.13
21:26
ОбщаяСебестоимость = 0;
Для СтрСумм = НачСтрДляСумм По КонСтрДляСумм Цикл
  КолвоНаСкладе = Число(Лист.Cells(СтрСумм, 2).Value);
  Себестоимость = Окр(ОбщаяСумма / ОстатокНаСкладах * КолвоНаСкладе, 2);
  Лист.Cells(СтрСумм, 8).Value = Себестоимость;
  Лист.Cells(СтрСумм, 6).Value = КолвоНаСкладе;
  ОбщаяСебестоимость = ОбщаяСебестоимость + Себестоимость;
КонецЦикла;

Как может быть, что Сообщить(""+ОбщаяСебестоимость) выводит 654,9999999999 вместо 65??? Причем не всегда, а иногда.
1 фобка
 
12.03.13
21:27
где в коде сообщить()?
2 zak555
 
12.03.13
21:29
сначала умножай, потом дели

+ у когда ты сложишь все строки в экселе, то сумма не будет равна ОбщаяСумма
3 shuhard
 
12.03.13
21:30
(0)  ОбщаяСебестоимость = ОбщаяСебестоимость + Себестоимость;
вовсе не означает, что будут сложены целые числа
4 фобка
 
12.03.13
21:31
+(2) имхо, это эксельная чисто фишка с "псевдоантиокруглением"
5 Classic
 
12.03.13
21:31
(3)
Что из них может быть не округленным числом?
6 Manonegro
 
12.03.13
22:28
(5) Вот и я о том же...

(2) Точно, про порядок то я забыл! Но на округление то это не влияет. Я жестко прописываю округлить до двух цифр после запятой. Откуда остальные берутся?
7 Manonegro
 
12.03.13
23:48
(4) При чем здесь Эксель? Я прибавляю к нулю округленное число. Откуда берутся лишние цифры после запятой? Платформа 8.2.15.289.
8 pumbaEO
 
13.03.13
00:30
Поменяй местами:




на :

ОбщаяСебестоимость = ОбщаяСебестоимость + Себестоимость;
Лист.Cells(СтрСумм, 8).Value = Себестоимость;
9 Torquader
 
13.03.13
00:30
Значит, она в double хранит данные - там дробные числа хранятся в двоичном эквиваленте, а он в десятичный и обратно периодической дробью переводится.
Если хочешь точно - считай в целых числах, а на выходе подели на 100.
10 Torquader
 
13.03.13
00:32
P.S. как показала работа на Visual Basic для денежных расчётов или тип Currency или в целых числах, иначе получаются перлы, типа 1.03!=1.03
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.