Java 将浮点转换为int
你好, 我有一个随机浮点值,我想转换成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
-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);