1.5
есть, количество значащих цифр несмотря на это, такой же как 1.50
(и даже 1.5000000000000
).
Вам необходимо отделить значение от его .
Если вы хотите выход с двух десятичных цифр, просто используйте String.format
, например, с:
public class Test
{
public static void main(String[] args) {
double d = 1.50000;
System.out.println(d);
System.out.println(String.format("%.2f", d));
}
}
, который выводит:
1.5
1.50
Если вы все еще хотите функцию, которая делает все, что для вас и дает вам конкретный формат, вам нужно вернуть строку с чем-то вроде:
public static String roundOff(double num, double acc, String fmt) {
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
и назвать его:
resultString = roundOff(value, 20, "%.2f"); // or 100, see below.
Это позволит адаптировать точность и формат вывода в любом случае вы желаете, хотя вы можете все еще трудно кода значения, если вы хотите простоты:
public static String roundOff(double num) {
double acc = 20;
String fmt = "%.2f";
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
одно замечание: ваш вопрос гласит, что вы хотите, чтобы округлить до «двух знаков после запятой», но это не совсем гель с использованием 20
как точность, так что будет круглый это до следующего кратного 1/20
. Если вы действительно хотите округлить до двух десятичных знаков, значение, которое вы должны использовать для accuracy
, равно 100
.
Существует не отдельный «двойной» для 1,5 и 1,50. Они численно одинаковы, поэтому есть только одно «двойное» представление их обоих. –
Возможно, ваш метод должен возвращать 'String', а не' double', чтобы вы могли делать с ним какое-то форматирование. –
Вы уверены в том, что '20'? Возможно, я неправильно понял, что вы пытаетесь сделать, но ваш метод для '1.489' не вернет' 1.49'. Я думаю, вы бы хотели установить точность до 100 для двух знаков после запятой. – cyon