2012-10-24 31 views
11

我想雙分成整數和小數部分分離雙入整數和小數部分

因此,例如,數字24.4應分成24和4

int integer = (int)number; 
double decimal = number-(int)number; 
System.out.println(decimal); 

使用這種方法使我有以下值:

integer = 24 
decimal = 0.3999999999999986 

我需要十進制值是4

如何解決這個問題?

+0

你可以把它格式化爲小數點後只打印一位數字。 –

+12

你是否明白24.4號碼不能被完全表示爲'double'? –

+0

@Ashish也試試我的解決方案!好有趣! :-) – RGO

回答

10

你可以做一個字符串split(...)。然後Integer parseInt(...)找回這兩個整數分量。

+15

這很危險:2.03將作爲小數部分「3」而不是「03」進行處理。 –

+0

這不是一個好習慣! –

4

這是因爲double s不完全是「實數」 - 請記住,在任何範圍內都有無限數量的實數,而double中只有有限數量的數字 - 因此有限數量的值,所以某些圓關閉必須發生。

事實是,24.4不能通過double精確表示 - 讓你的號碼的分數確實是值得各地0.3999 ....
如果你想要一個確切的解決方案 - 你應該使用,讓您精確值庫爲小數,例如BigDecimal

如果您想了解更多關於double S是不準確這個問題 - 你應該閱讀更多關於floating points arithmeticsthis article,雖然高的水平,也才能真正瞭解發生了什麼事情是必須的。

如果你還不能理解這些文章 - 只需要考慮:如果你需要一個確切的值 - double s不能提供它 - 你應該使用一個庫,如果是這種情況。

5

根據的小數位數,您可以使用此方法:

double number = 24.4; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 

System.out.println(decimal); 

說明:刪除小數點,做減法,最後返回小數點回到它原來的位置!

+2

該技術在90%以上的案例中失敗。 – EJP

+1

@EJP *取決於小數位數!*當只有一位十進制數字時,請給我看一個失敗的案例。 – RGO

+0

0.1沒有確切的表示。它怎麼可能工作?嘗試24.1到24.9。 – EJP

0

首先找到小數點後數字的數字,用這麼多數量的10來代表乘數。例如:x = 26.78621然後乘以100000 [在這裏你不能像x * 10那樣相乘,再次x * 10等等(5次),第一次乘以10時,它會給你267.862199999 ..]從結果中減去2600000。這裏是你的答案的鏈接,我已經編碼了。 https://stackoverflow.com/a/18517555/2508414

1

![這裏是我的解決方案] [1]

這裏是我的解決方案。 我在C程序設計中使用的簡單的方法,有兩種不同的整數分割分數...這裏下面是代碼

#include<stdio.h> 
void main() 
{ 
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z; 
printf("%lf",x); 
printf("\ninteger Part %d\n",y); 
printf("\nDecimal Part %d\n",zd); 
} 

輸出


24。559999 整數部分24

小數部分559999488

1

這裏是我寫來完成這個小方法:

/** 
* 
* @param n 
* @return 
*/ 
private static double getFractionalPart(double n) {  
    if (n > 0) { 
     return n - Math.floor(n); 
    } else { 
     return ((n - Math.ceil(n)) * -1); 
    } 
} 
0

隨着RGO說,你可以做到這一點,也有圓形的十進制數,以以獲得適當的價值。 例如:

double number = 20.57; 

int integer = (int)number; 
double decimal = (10 * number - 10 * integer)/10; 
double temp = Math.round(decimal*100.0)/100.0; 
System.out.println("Int = " + integer + "\nDecimal = " + temp); 
1
double number = 20.57; 
Double.valueOf(String.valueOf(number)).intValue() 
0

你可以這樣做:

使用1000拿到3分:

例如:

(1.2445 - 1) * 100 = 0.244