2016-10-12 12 views
1

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

То, что я хочу добиться:
с положительным целым числом п, я хочу иметь десятичную 1/н с п количества цифр после запятой. Таким образом, первые 10 будет:

1/1 = 1  -> 1.0 
1/2 = 0.5  -> 0.50 
1/3 = 1.333... -> 1.333 
1/4 = 0.25  -> 0.2500 
1/5 = 0.2  -> 0.20000 
1/6 = 0.666... -> 0.666666 
1/7 = 0.142... -> 0.1428571 
1/8 = 0.125 -> 0.12500000 
1/9 = 0.111... -> 0.111111111 
1/10 = 0.1  -> 0.1000000000 

Предпочтительно у меня есть результат в виде строки и используйте код, который является как можно более коротким. Таким образом, нет for-loops или всех настроек Formatter. Предпочтительно что-то вроде String.format(..., n); или другое короткое решение.

Я попробовал String.format("%f0", 1./n);, чтобы увидеть, что он будет выводить, но это только добавляет до 7 цифр (не знаю, как это настроено, и если это настраивается). Таким образом, для String.format("%f0", 1./8); выход 0.1250000 отсутствует 8-й ноль.

ответ

2

Попробуйте следующее:

String.format("%." + n + "f", (1.0/n)); 
+0

Perfect, спасибо! Оказалось, так просто. :) –

+0

Хмм .. для 'n = 18' это приводит к' 0.0555555555555555500' вместо '0.055555555555555555': S –

+0

Это связано с тем, что двойник имеет только 17 значащих цифр. –

0

В случае, если вы не получите «одиночный» формат для работы, есть простой способ: создать желаемый результат в два этапа.

Пример для 1/8 случая: (.! 0 и 8 цифр)

  1. value = "0.125";
  2. вы хотите общую длину 10, так просто создать еще одну строку padding = "00000";

И возврат value + padding

Прокладка может быть легко выполнена с использованием String.format(); см. here для различных примеров.

0

Используйте NumberFormatclass и установить setMaximumFractionDigits и setMinimumFractionDigits

Пример

private static void resolveDecimalPlaces(int i) { 
    final NumberFormat nf = NumberFormat.getInstance(); 
    nf.setMaximumFractionDigits(i); 
    nf.setMinimumFractionDigits(i); 
    nf.setRoundingMode(RoundingMode.HALF_UP); 

    System.out.println(nf.format(1.0/i)); 
}