1

有没有办法动态格式化浮点值?

我以为我可以做这样的事情:

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

其中 k 是每次通过循环的增量......但是,这似乎并没有解决问题......

我希望数字显示如下:

0.7897
0.78977
0.789778
0.7897789 

有任何想法吗?

4

4 回答 4

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
于 2013-09-11T21:02:38.693 回答
2

可以像这个例子一样使用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
于 2013-09-11T21:03:15.633 回答
0

如果您不需要变量的实际浮点值,您可以使用subString来自String.

优点是您的格式化变量不会被四舍五入。这是其他两个答案的黑客替代方案。

于 2013-09-11T21:02:47.927 回答
0

看看:http ://docs.oracle.com/javase/tutorial/java/data/numberformat.html

由于我不知道您感兴趣的格式,因此我无法进一步帮助您。

于 2013-09-11T20:55:07.593 回答