Округление чисел до определенного разрешения - PullRequest
0 голосов
/ 14 ноября 2011

Я знаю, что многие языки имеют возможность округлять до определенного количества десятичных знаков, например, в Python:

>>> print round (123.123, 1)
    123.1
>>> print round (123.123, -1)
    120.0

Но как нам округлить до произвольного разрешения, которое не десятичное кратное. Например, если я хочу округлить число до ближайшей половины или трети так, чтобы:

123.123 rounded to nearest half is 123.0.
456.456 rounded to nearest half is 456.5.
789.789 rounded to nearest half is 790.0.

123.123 rounded to nearest third is 123.0.
456.456 rounded to nearest third is 456.333333333.
789.789 rounded to nearest third is 789.666666667.

1 Ответ

8 голосов
/ 14 ноября 2011

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

Затем вы округляете его доближайшее целое число, до его масштабирования.

В Python (который также является очень хорошим языком псевдокода) это будет:

def roundPartial (value, resolution):
    return round (value / resolution) * resolution

print "Rounding to halves"
print roundPartial (123.123, 0.5)
print roundPartial (456.456, 0.5)
print roundPartial (789.789, 0.5)

print "Rounding to thirds"
print roundPartial (123.123, 1.0/3)
print roundPartial (456.456, 1.0/3)
print roundPartial (789.789, 1.0/3)

print "Rounding to tens"
print roundPartial (123.123, 10)
print roundPartial (456.456, 10)
print roundPartial (789.789, 10)

print "Rounding to hundreds"
print roundPartial (123.123, 100)
print roundPartial (456.456, 100)
print roundPartial (789.789, 100)

В этом коде выше этоroundPartial функция, которая обеспечивает функциональность, и ее очень легко перевести на любой процедурный язык с помощью функции round.

Остальная часть, в основном тестовая программа, выдает:

Rounding to halves
123.0
456.5
790.0
Rounding to thirds
123.0
456.333333333
789.666666667
Rounding to tens
120.0
460.0
790.0
Rounding to hundreds
100.0
500.0
800.0
...