2013-09-11 5 views
1

Есть ли способ динамически форматировать значение поплавка?Динамическое форматирование строки в java

Я думал, что я мог бы сделать что-то вроде этого:

System.out.println(new BigDecimal(String.format("%" + k + "s", answer)).toPlainString()); 

где к приращений каждый раз через петлю ... Однако, это не кажется, сделать трюк ...

Я хочу, чтобы цифры выглядели следующим образом:

0.7897 
0.78977 
0.789778 
0.7897789 

любые идеи?

+0

является к должен быть точность? Какой формат вы пытаетесь сделать? Кроме того, почему вы создаете BigDecimal на основе String? Я действительно смущен тем, что вы пытаетесь сделать здесь. – crush

+0

@crush да k это точность – BigBug

+3

Хе-хе. Вам нужно фактическое значение float или просто печать строк? Вы можете взломать его и использовать 'substring'. – GGrec

ответ

6
for (int i=3; i<10; i++) { 
    System.out.println(String.format("%1." + i + "f", Math.PI)); 
} 

Нечто подобное должно работать

[tmp] % java Foo 
3.142 
3.1416 
3.14159 
3.141593 
3.1415927 
3.14159265 
3.141592654 
+0

это сработает, но пример в вопросе не круглый. –

+0

Хотелось упомянуть ''%. "+ I +" f "', но я подумал, что думаю на C++. Очень хороший ответ. – GGrec

+0

сладкий! это именно то, что я хотел! Спасибо Сет! – BigBug

0

Посмотрите:. http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

Я не могу вам помочь в дальнейшем, так как я не знаю, формат вы заинтересованы в

+0

Эй, @CommuSoft, вы должны попытаться суммировать содержимое своей ссылки вместо того, чтобы иметь только ссылку в ответах в случае linkrot. http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

0

Если вам не нужно фактическое значение поплавка ваших переменных, вы можете просто распечатать их в цикле, используя API subString от String.

Преимущество в том, что ваша форматированная переменная не будет округлена. Это альтернатива другим двум ответам.

1

Использование NumberFormat может быть сделано как в этом примере

float f = 0.342566246 
NumberFormat n = NumberFormat.getInstance() 
for(int i = 2; i< 6;i++) 
{ 
    n.setMaximumFractionDigits(i) 
    System.out.println(n.format(f)) 
} 

Дает, который округляется.

0.34 
0.343 
0.3426 
0.34257 

Вы можете контролировать округление, добавив RoundingMode например, добавление

n.setRoundingMode(RoundingMode.DOWN); 

дает

0.34 
0.342 
0.3425 
0.34256 
Смежные вопросы