Java-在2个小数点后舍入任何内容*不仅仅是%.2f *

时间:2018-04-20 13:51:18

标签: java printf decimal

正如最高层所说。我陷入了一个相当简单的问题,但似乎我被卡住了。

实施例: x = 3.141

当我使用printf("x is: %.2f", x);时 它吐出:X is 3.14

计算州税时,任何超过一美分的东西都需要四舍五入,所以3.141应该是3.15。是否有一个我可以修改的简单printf或我可以添加的其他标签?或者我需要进行一轮计算附加位?

4 个答案:

答案 0 :(得分:3)

最简单的方法是在数字上加0.005。

PS:确保严格按BigDecimal计算所有内容。建议不要使用双倍的金钱。

答案 1 :(得分:3)

不使用printf,而是DecimalFormat使用RoundingMode.CEILING

DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
String rounded = df.format(x)
System.out.printf("x is: %s", rounded);

答案 2 :(得分:0)

这是一个可能的解决方案:

public static float roundUp(float num, int positions) {
    int tmp = ((int)(num*Math.pow(10, positions)));
    tmp = tmp + 10 - tmp%10;
    return ((float)(tmp/Math.pow(10, positions)));
}

您可以通过致电

获得所需内容
roundUp(num, 3);

或者如果你想要一个不太通用的方法,你也可以使用:

public static float roundUp(float num) {
    int tmp = ((int)(num*1000.0f));
    tmp = tmp + 10 - tmp%10;
    return ((float)(tmp/1000.0f));
}

答案 3 :(得分:0)

String

避免魔术舍入数字(你需要加0.9,或0.99,或0.999等)