Двойное значение с определенной точностью в java

Я программирую простую java-программу. Мне нужно получить строку из ввода и разделить ее на две части: 1-двойную 2-строку. Затем мне нужно сделать простой расчет по двойнику и отправить результат на вывод с определенной точностью (4). Он работает нормально, но есть проблема, когда ввод равен 0, тогда он работает неправильно.

Например, для этих входов вывод будет:

1 кг
Выход: 2,2046

3,1 кг
Выход: 6,8343

Но когда вход равен 0, выход должен быть 0.0000, но он показывает 0.0. Что я должен сделать, чтобы заставить его показывать 0.0000?

Я читал аналогичные сообщения о двойной точности, они предлагают что-то вроде класса BigDecimal, но я не могу использовать их в этом случае, мой код для этого:

line=input.nextLine();
array=line.split(" ");
value=Double.parseDouble(array[0]);
type=array[1];
value =value*2.2046;
String s = String.format("%.4f", value);
value = Double.parseDouble(s);
System.out.print(value+" kg\n");

Ответ 1

DecimalFormat позволит вам определить, сколько цифр вы хотите отобразить. "0" приведет к выводу цифр, даже если значение равно нулю, а "#" пропустит нули.

System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n"); должен к хитрости.

Смотри документацию

Примечание: если используется часто, из соображений производительности вы должны создать экземпляр средства форматирования только один раз и сохранить ссылку: final DecimalFormat df = new DecimalFormat("#0.0000"); , Затем используйте df.format(value).

Ответ 2

добавьте этот экземпляр DecimalFormat в начало вашего метода:

DecimalFormat four = new DecimalFormat("#0.0000"); // will round and display the number to four decimal places. No more, no less.

// the four zeros after the decimal point above specify how many decimal places to be accurate to.
// the zero to the left of the decimal place above makes it so that numbers that start with "0." will display "0.____" vs just ".____" If you don't want the "0.", replace that 0 to the left of the decimal point with "#"

тогда вызовите экземпляр "four" и передайте свое двойное значение при отображении:

double value = 0;
System.out.print(four.format(value) + " kg/n"); // displays 0.0000

Ответ 3

Я предлагаю вам использовать класс BigDecimal для вычисления значений с плавающей запятой. Вы сможете контролировать точность арифметики с плавающей точкой. Но вернемся к теме :)

Вы можете использовать следующее:

static void test(String stringVal) {
    final BigDecimal value = new BigDecimal(stringVal).multiply(new BigDecimal("2.2046"));
    DecimalFormat df = new DecimalFormat();
    df.setMaximumFractionDigits(4);
    df.setMinimumFractionDigits(4);
    System.out.println(df.format(value) + " kg\n");
}

public static void main(String[] args) {
    test("0");
    test("1");
    test("3.1");
}

даст вам следующий вывод:

0,0000 kg

2,2046 kg

6,8343 kg

Ответ 4

Используйте DecimalFormat, чтобы отформатировать двойное значение для вывода строки фиксированной точности.

DecimalFormat является конкретным подклассом NumberFormat, который форматирует десятичные числа. Он имеет множество функций, предназначенных для его создания. возможность разбора и форматирования чисел в любой локали, включая поддержку для западных, арабских и индийских цифр. Он также поддерживает различные виды чисел, включая целые числа (123), числа с фиксированной запятой (123,4), научная нотация (1.23E4), проценты (12%) и валюта суммы (123 долл. США). Все они могут быть локализованы.

Пример -

System.out.print(new DecimalFormat("##.##").format(value)+" kg\n");

Ответ 5

String.format просто преобразует строковое представление значения с плавающей запятой. Если он не дает флага для минимальной точности, тогда просто вставьте конец строки нулями.

Ответ 6

System.out.format("%.4f kg\n", 0.0d) печатает "0,0000 кг"