将float转换为int

时间:2014-03-26 15:36:49

标签: java

Android Studio 0.5.2

您好,

我有一个随机浮动值,我想转换为int。

浮点数可以在-9.4182062E-99.593071E-8之间有一个随机数。

我只想得到正数int,所以如果数字是负的,即-5.5115866E-8它应该只返回5.我已经使用了Math.abs。

我尝试了以下内容:

int accel =  (int)Math.abs(randomAccel);

但是,无论accel是什么价值,randomAccel都会给我零。

非常感谢任何建议,

4 个答案:

答案 0 :(得分:3)

您的负数-5.485747E-5E-5结束,表示它为-0.0000548574 所以绝对值是0.0000548574

所以Math.abs(-0.0000548574)0.0000548574

(int)0.00005485740

结果为0

您确定您的代码是否响应0,无论随机值如何?检查您要转换的号码。

您应该使用您的值对代码进行单元测试。

答案 1 :(得分:1)

您的随机数范围非常小(负指数) - 重要的是它小于+/-1。当float投放到int时,所有小数部分都会被截断,因此,在将符号设置为正数后,您范围内的每个数字都会生成0如果转为int

您似乎想忽略数字的指数。一种方法是:

int accel = Integer.parseInt(String.valueOf(randomAccel).replaceAll("-?(\\d+).*", "$1"));

答案 2 :(得分:1)

 int accel = (int)Math.abs(randomAccel);

这一行执行3个步骤

  1. 获取randomAccel
  2. 的绝对值
  3. 将值转换为int(浮点数被截断)
  4. int值分配给accel
  5. 现在让我们看看当输入在[-9.4182062E-9,9.593071E- 8]范围内时会发生什么(顺便说一下-5.485747E-5不在此范围内。)

    Input value -9.4E-9 = -0.0000000094
    
    1. -9.4E-9 converted to 9.4E-9
    2. 9.4E-9 cast to int, fractional part is removed. Value is 0
    3. 0 is assigned to `accel`
    

    如果您只想要最重要的数字,您可以乘以10^8并查看该值是否大于0,如果是则为trucate,否则乘以10然后截断:

    int accel = 0;
    r = Math.abs( randomAccel ) * 100000000;
    if( r >= 10 ) {/* error out of range */}
    else if( r > 0 ) accel = (int)r;
    else
    {
        r *= 10;
        accel = (int)r;
    }
    

答案 3 :(得分:1)

import static java.lang.Math.*;

转换部分:

double input =-5.485747E-5; //for example
double tmp = abs(input);
tmp *= pow(10, abs(floor(log10(tmp))));
int out = (int) tmp;
System.out.println(out);

输出:

5