Java 将浮点转换为int

Java 将浮点转换为int,java,Java,你好, 我有一个随机浮点值,我想转换成int 浮点可以有一个介于-9.4182062E-9到9.593071E-8之间的随机数 我只想得到正整数,所以如果这个数是负数,即-5.5115866E-8它应该只返回5。我用了Math.abs来做这个 我尝试了以下方法: Android Studio 0.5.2 然而,accel始终给我一个零,不管randomAccel是什么值 非常感谢您的建议,您的负数-5.485747E-5以E-5结束,意思是-0.00005485774 因此绝对值为0.0000

你好,

我有一个随机浮点值,我想转换成int

浮点可以有一个介于
-9.4182062E-9
9.593071E-8
之间的随机数

我只想得到正整数,所以如果这个数是负数,即
-5.5115866E-8
它应该只返回5。我用了Math.abs来做这个

我尝试了以下方法:

Android Studio 0.5.2
然而,
accel
始终给我一个零,不管
randomAccel
是什么值


非常感谢您的建议,

您的负数
-5.485747E-5
E-5
结束,意思是
-0.00005485774
因此绝对值为
0.0000548574

因此
Math.abs(-0.0000548574)
0.0000548574

(int)0.0000548574
0

结果是
0

无论random的值是多少,您是否确定您的代码都在响应
0
?检查您试图转换的号码


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

你的负数
-5.485747E-5
E-5
结束,意思是它是
-0.00005485774
因此绝对值为
0.0000548574

因此
Math.abs(-0.0000548574)
0.0000548574

(int)0.0000548574
0

结果是
0

无论random的值是多少,您是否确定您的代码都在响应
0
?检查您试图转换的号码


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

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

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

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

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

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

int accel =  (int)Math.abs(randomAccel);
该行执行3个步骤

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

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

    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`
    
    该行执行3个步骤

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

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

    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`
    
    转换部分:

    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);
    
    转换部分:

    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);