Округлить до следующего большего числа - PullRequest
6 голосов
/ 13 октября 2011

Я хочу округлить значение (удвоить) до следующего (всегда округлить) числа. Округление может быть определено любым числом.

Exp:.
Округление до следующего 2.50

0.00       --> 0.00
0.01       --> 2.50
2.49       --> 2.50
2.50       --> 2.50
2.50000001 --> 5.00
...

Алгоритм для этого прост (если 'число' было отрицательным * -1):

Math.Round((Math.Abs(number) + tolerance) / 2.50, MidpointRounding.AwayFromZero) * 2.50

Допуск определяется следующим образом:

tolerance = 2.50 / 2 - Math.Pos(10, -x);

Но я не знаю, как определить х! Потому что в случае с 1-го по 4-й пример x должен быть 0,01, в случае с 5-м примером - 0,0000001 и т. Д. *

Результаты поиска предлагают только проанализировать строку десятичного числа и сосчитать десятичную цифру. Нет ли математического пути? В противном случае мне придется работать с различными настройками локали для десятичного разделителя и чисел без десятичных цифр (без десятичного разделителя для удаления).

Пусть у кого-нибудь есть решение моей проблемы. Спасибо!

С уважением, Дэнни

Ответы [ 4 ]

15 голосов
/ 13 октября 2011

Как насчет Math.Ceiling(v / 2.5) * 2.5?

0 голосов
/ 13 октября 2011

вы можете использовать Math.Ceiling для этого

0 голосов
/ 13 октября 2011

Вам нужно Math.Ceiling

Это принимает удвоение и округляет его вверх до ближайшего целого числа, если значение уже не равно целому числу. Однако тип данных, который он возвращает, все еще является двойным.

Пример использования ...

Double testValue = 1.52;
Console.WriteLine(Math.Ceiling(testValue));

... будет печатать 2.

0 голосов
/ 13 октября 2011

Math.Ceiling делает именно то, что вам нужно.

...