切割无限浮动

时间:2016-12-06 12:57:09

标签: java android

我的应用程序浮动,产生无穷大:

float fx = eddystoneAdvEvtCurr_mA * txTime_ms / (eddystoneFrame.interval / 1000);

返回61,333333(3)。我尝试将其转换为String并拆分,转换为int,但无效。我可以从中提出61,3361,3吗?当我将其转换为int时,它会返回奇怪的值:2147483647。这看起来很简单,但我花了很多时间来搞清楚。

3 个答案:

答案 0 :(得分:0)

您可以剪切这样的数字:

float fx = eddystoneAdvEvtCurr_mA * txTime_ms / (eddystoneFrame.interval / 1000);

float fxRounded= ((int)(100*fx))/100.f

fxRounded应为61,33

这个想法:

  1. 将浮点数乘以10的幂,相当于您想要的小数位数。
  2. 将结果转换为int(此逗号后面的所有数字的缩减)
  3. 除以10的相同幂(如1.)但是使其成为浮点或双除法(因此使用/100.而不是/100)以保持结果数字右边的逗号
  4. 这是我测试的代码:它打印:61.33

    public class T{
    
      public static void main(String[] args){
        float fx = 61.3333333333f;
        float fxRounded=((int)(100*fx))/100.f;
        System.err.println(""+fxRounded);
      }
    }
    

答案 1 :(得分:0)

要了解浮点数如何存储在JVM中,您可以查看此wikipedia article。 (您还可以查看JLS

如果您想要具有修正精度,则应使用BigDecimal。例如:

BigDecimal ten = BigDecimal.valueOf(10);
BigDecimal three = BigDecimal.valueOf(3);
int precision = 2;
System.out.println(ten.divide(three, precision, BigDecimal.ROUND_CEILING));

输出:

  

3.34

答案 2 :(得分:0)

你可以使用

Math.round();

为double或float值的圆形