2014-03-26 224 views
0
Android Studio 0.5.2 

你好,轉換浮點數爲int

我有,我想轉換爲int的隨機浮點值。

該float可以有一個-9.4182062E-99.593071E-8之間的隨機數。

我只想得到正整數,所以如果數字是負的,即-5.5115866E-8它應該只返回5.我已經使用了Math.abs。

我曾嘗試以下:

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

然而,accel一直給我一個零不管randomAccel是什麼樣的價值。

非常感謝您的任何建議,

+0

http://stackoverflow.com/q/1295424/2282538 – Tyler

回答

3

你負數-5.485747E-5完成由E-5這意味着它是-0.0000548574 所以絕對值0.0000548574

所以Math.abs(-0.0000548574)0.0000548574

(int)0.00005485740

結果是0

是你的確保您的代碼是響應0不管的隨機值?檢查您嘗試轉換的號碼。

你應該用你的值單元測試你的代碼。

1

您的隨機數範圍具有非常小的幅度(負指數) - 重要的是它小於+/-1。當float投射到int時,所有小數部分都是截取,因此在將符號設置爲正數後,範圍內的每個數字將導致0(如果轉換爲int)。

看起來你想忽略你的數字的指數。要做到這一點的方法之一是:

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

該行執行3個步驟

  1. 獲取的randomAccel
  2. 絕對值的值強制轉換爲int(浮點數被截斷)
  3. 指定int的值爲accel

現在讓我們來看看當輸入在[-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; 
} 
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