删除浮点数的尾随数字

时间:2013-09-21 18:55:03

标签: java floating-point rounding

我的java程序中有一些浮点变量:

float var1=1.23456f;
float var2=2.34567f;

在我的计算中,我的float变量中小数点后的位数增加和减少以保持精度。例如经过一番计算      的System.out.println(VAR1); 可以打印:

6.35

9.4500082E

88.25214

我想将这些值四舍五入到小数点后3位并删除后续的十进制数字,以便浮点数四舍五入:

6.350   9.450   88.252

据我所知,NumberFormat和String.format()将输出作为格式化的String返回。如何将输出作为四舍五入的浮点数在我的计算中进一步使用它? 我可以将规则应用于我的浮点(浮点)变量(实例),以便在3位小数后总是舍入/删除尾随数字吗?

3 个答案:

答案 0 :(得分:4)

不,你不能得到一个“圆润的浮动”。 float不存储十进制数。如果要使用特定的十进制数字进行计算,请使用BigDecimal

其他答案都不能满足您的实际需求。

答案 1 :(得分:-1)

一种(效率不是很高)的方法是仍然使用NumberFormat类返回String(包含3位数),然后使用Float.parseFloat()将其重新设置为一个漂浮物。

答案 2 :(得分:-1)

使用简单的辅助方法在任意位置上舍入:

 public static void main(String[] args) throws IOException {
    float fl = 1.2345f;
    System.out.println(round(fl, 3));
}

public static float round(float source, int positions) {
    long multiplier = (long) Math.pow(10, positions);
    return return ((float)((int) (source * multiplier)) / multiplier);
}

请注意,该片段仅展示了这个想法,并且由于长时间溢出而限制在约18个位置。