Java 截断浮点数组的元素

Java 截断浮点数组的元素,java,floating-accuracy,Java,Floating Accuracy,这可能是一个奇怪的问题,但如何将浮点数组截断为例如:0.2f(小数点后2位) 假设我有一个浮点数组X,它包含10个值为2.123456的元素。我想把它们改成2.123 有人能帮忙吗 亲切问候查看以下代码: public class Truncate { public static void main(String[] args) { System.out.println(truncate(2.123556f)); } public static float truncate

这可能是一个奇怪的问题,但如何将浮点数组截断为例如:0.2f(小数点后2位)

假设我有一个浮点数组X,它包含10个值为2.123456的元素。我想把它们改成2.123

有人能帮忙吗


亲切问候

查看以下代码:

public class Truncate {
  public static void main(String[] args) {
    System.out.println(truncate(2.123556f));
  }

  public static float truncate(float f) {
    // after casting it to int, it will remove all decimal values.
    // float bigInt = (int) (Math.round(f * 1000)); // prints 2.124 for f=2.123556f
    float bigInt = (int) (f * 1000); // prints 2.123 for f=2.123556f
    float result = bigInt / 1000;

    return result;
  }
}
您可以创建自己的truncate方法,或者在需要时使用round。这样你就可以强制它是3位小数。如果你动态地需要它,那么你需要玩“1000”

不管它是数组还是浮点,只要循环数组来调用truncate方法就行了

更新:

也许不是最优雅的,但你可以用这样的大小数

import java.math.BigDecimal;

public class Truncate {
  public static void main(String[] args) {
    System.out.println(truncate(new BigDecimal(0.13642351627349847f)));
  }
  public static BigDecimal truncate(BigDecimal number) {
    BigDecimal thousand = new BigDecimal(1000);
    BigDecimal mult = new BigDecimal(number.multiply(thousand).intValue()); 
    BigDecimal result = mult.divide(thousand);
    return result;
  }
}

看一下<代码>数学。圆(浮点)< /C>。请看这里:如果需要控制java中的小数点,请考虑使用BigDigByl而不是FLAG。许多值,如2.123,可以用BigDecimal表示,但不能用float或double表示。好的,感谢BigDecimal的提示。您的示例听起来好像只有一个float?这是大小为1的浮点数组吗????正如其他人所说,您的问题实际上相当于如何在一般情况下对浮点进行舍入-不考虑其多个浮点或仅一个浮点。对于您的代码,值0.13642351627349847,我得到了0.135996566772454。我想要的是0.1364。你能给我一点提示吗?@PedroNeves我得到了
0.136
,代码保持不变。这是我的建议:
truncate(0.13642351627349847f)
,但这就是为什么如果存在此类精度问题,通常使用BigDecimal。