Имя: Пароль:
IT
 
Странные округления в Delphi
0 aka MIK
 
20.02.14
11:22
Используется функция roundto(), результат
2,205    2,21
16,535    16,53
13,235    13,23
15,245    15,24
14,025    14,03
8,595    8,6
1,685    1,68
2,565    2,57
14,605    14,6
12,145    12,15
8,595    8,6
9,145    9,14
4,185    4,18
2,205    2,21

Пятерка округляется то вверх, то вниз. Есть в этом какая-то логика?

Исходники в math.pas написаны на ассемблере потому разобраться не могу )
1 fmrlex
 
20.02.14
11:24
RoundTo() использует так называемое банковское округление, приводя число к ближайшему четному
2 aka MIK
 
20.02.14
11:29
(1) К ближайшему четному чему? Целой части? Тогда см. 9,145    9,14

Или последнего разряда округления? Тогда см. 2,565    2,57
3 rphosts
 
20.02.14
11:30
(1) так и есть только к нечётному
4 rphosts
 
20.02.14
11:31
(2) к разряду до которого округлять
5 H A D G E H O G s
 
20.02.14
11:31
аффтора спасет
SimpleRoundTo()
6 Кирпич
 
20.02.14
11:32
7 sda553
 
20.02.14
11:32
(3) 8.595 должно тогда было бы в 8.59 округлиться
8 Принт
 
20.02.14
11:34
SetRoundMode тоже, на всякий
9 aka MIK
 
20.02.14
11:34
(3) см. 1,685    1,68
10 rphosts
 
20.02.14
11:34
(7) до конца не смотрел... из "промышленых" методов округления с чередованием куда 0,5 будет округлено (вверх или вниз) есть только метод банковского округления
11 sda553
 
20.02.14
11:36
У меня такое подозрение, что перевели в другую систему отчисления, там округлили, перевели обратно и обрезали
12 rphosts
 
20.02.14
11:40
(11) когда-то в целях скорости (была числодробительная задача) из дельфи выгружал в сопр. как флоат а забирал оттуда как интегер (для скорости, всего 2 ассемблерных инструкции) - такой лажи не было
13 Принт
 
20.02.14
11:44
http://www.cyberforum.ru/delphi-beginners/thread841387.html говорят, царь ненастоящий
14 fmrlex
 
20.02.14
11:45
(3)
The Round function rounds a floating point Number to an Integer value.

The rounding uses Bankers rules, where an exact half value causes a rounding to an even number:

12.4 rounds to      12
12.5 rounds to      12 // Round down to even
12.6 rounds to      13
    
13.4 rounds to      13
13.5 rounds to      14 // Round up to even
13.6 rounds to      14
15 aka MIK
 
20.02.14
11:48
(14) Мне надо округлять до копеек

Реально мозг можно сломать

9,145    9,14
12,145    12,15

при этом

2,565    2,57
17,565    17,57
16 Torquader
 
20.02.14
11:52
Вообще-то, если очень хочется работать с суммами в компьтере - храните их в целых числах (то есть в копейках).
Не забывайте, ещё, что как бы вы радостно не округлили число, некоторые ваши числа всё равно станут бесконечной двоичной дробью.
17 MMF
 
20.02.14
12:30