В Java, как бы я округлил число до произвольного уровня точности? - PullRequest
3 голосов
/ 15 сентября 2011

Например, предположим, у меня есть метод

double roundDown(double unrounded, double precision) {
}

roundDown(137.42973, 0.01) would return 137.42
roundDown(137.42973, 0.05) would return 137.4
roundDown(137.42973, 0.25) would return 137.25

Существуют ли библиотеки, чтобы сделать что-то подобное, иначе алгоритм достаточно прост?

Ответы [ 2 ]

5 голосов
/ 15 сентября 2011

Разделите исходное число на точность, округлите до ближайшего целого числа, а затем снова умножьте на точность:

double roundDown(double unrounded, double precision) {
    return precision * Math.floor(unrounded / precision);
}

Обратите внимание, что присущие неточности с плавающей точкой означают, что ваш номер не может быть точно ответом, который вы ищете - например, вы можете получить 137,399999 вместо 137,4

4 голосов
/ 15 сентября 2011

Если вы хотите действительно произвольную точность в десятичном формате, посмотрите эту библиотеку: http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigDecimal.html

...