我想雙分成整數和小數部分分離雙入整數和小數部分
因此,例如,數字24.4應分成24和4
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
使用這種方法使我有以下值:
integer = 24
decimal = 0.3999999999999986
我需要十進制值是4
如何解決這個問題?
我想雙分成整數和小數部分分離雙入整數和小數部分
因此,例如,數字24.4應分成24和4
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
使用這種方法使我有以下值:
integer = 24
decimal = 0.3999999999999986
我需要十進制值是4
如何解決這個問題?
你可以做一個字符串split(...)。然後Integer parseInt(...)找回這兩個整數分量。
這很危險:2.03將作爲小數部分「3」而不是「03」進行處理。 –
這不是一個好習慣! –
這是因爲double
s不完全是「實數」 - 請記住,在任何範圍內都有無限數量的實數,而double
中只有有限數量的數字 - 因此有限數量的值,所以某些圓關閉必須發生。
事實是,24.4不能通過double
精確表示 - 讓你的號碼的分數確實是值得各地0.3999 ....
如果你想要一個確切的解決方案 - 你應該使用,讓您精確值庫爲小數,例如BigDecimal
。
如果您想了解更多關於double
S是不準確這個問題 - 你應該閱讀更多關於floating points arithmetics和this article,雖然高的水平,也才能真正瞭解發生了什麼事情是必須的。
如果你還不能理解這些文章 - 只需要考慮:如果你需要一個確切的值 - double
s不能提供它 - 你應該使用一個庫,如果是這種情況。
首先找到小數點後數字的數字,用這麼多數量的10來代表乘數。例如:x = 26.78621然後乘以100000 [在這裏你不能像x * 10那樣相乘,再次x * 10等等(5次),第一次乘以10時,它會給你267.862199999 ..]從結果中減去2600000。這裏是你的答案的鏈接,我已經編碼了。 https://stackoverflow.com/a/18517555/2508414
![這裏是我的解決方案] [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
這裏是我寫來完成這個小方法:
/**
*
* @param n
* @return
*/
private static double getFractionalPart(double n) {
if (n > 0) {
return n - Math.floor(n);
} else {
return ((n - Math.ceil(n)) * -1);
}
}
隨着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);
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
你可以這樣做:
使用1000拿到3分:
例如:
(1.2445 - 1) * 100 = 0.244
你可以把它格式化爲小數點後只打印一位數字。 –
你是否明白24.4號碼不能被完全表示爲'double'? –
@Ashish也試試我的解決方案!好有趣! :-) – RGO