|
Странные округления в 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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |