2015-07-11 65 views
1

我知道這聽起來很愚蠢。但我不知道如何將5.5轉換爲5.0。如何在java中轉換5.5到5.0

我所做的是:

int expiry = month2 + month1; 
int expiry1 = expiry; 
int sum = 0; 

DecimalFormat df = new DecimalFormat("#.00000"); 
df.format(expiry); 
if (expiry > 12) { 
    expiry = (expiry/12); 

    sum = ((expiry1 - (expiry * 12)) - 1); 
    System.out.println(sum); 
    month3 = sum; 
    year1 = (year1 + expiry); 

} 

如果我們考慮一下,如果條件時到期的值,例如30,它使輸出爲3,因爲小數的,但我想回答,因爲2我嘗試使用十進制格式但不起作用。我嘗試投射,但我嘗試它時失敗(也許我不知道這樣做的正確方法)。

我嘗試使用模式

String truncatedValue = String.format("%d", expiry).split("\\.")[0]; 

,然後再次將其轉換成整數,但這並不爲我工作。

+8

爲什麼不使用['Math.floor(double)'](https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#floor-double-)? – Turing85

+1

或'double d = 5.5; d =(double)(int)d;',醜陋地獄,但工程 –

+0

@ Turing85我想通過使用Math.floor(double)5.5/5.6將轉換爲6.(我不知道它是否正確與否我是新的Java),但我希望輸出爲5,以防止到期值爲5.5或5.6時 – sss

回答

2

正如評論中指出的那樣,您可以使用Math.floor。 另一種選擇是轉換爲long或使用Math.round。這裏是你的選擇的概述獲得x = 5

// Casting: Discards any decimal places 
double a = (long) 5.4; 
System.out.println(a); // 5.0 

double b = (long) 5.6; 
System.out.println(b); // 5.0 

double c = (long) -5.4; 
System.out.println(c); // -5.0 

double d = (long) -5.6; 
System.out.println(d); // -5.0 

// Math.floor: Rounds towards negative infinity 
double e = Math.floor(5.4); 
System.out.println(e); // 5.0 

double f = Math.floor(5.6); 
System.out.println(f); // 5.0 

double g = Math.floor(-5.4); 
System.out.println(g); // -6.0 

double h = Math.floor(-5.6); 
System.out.println(h); // -6.0 

// Math.round: Rounds towards the closest long 
double i = Math.round(5.4); 
System.out.println(i); // 5.0 

double j = Math.round(5.6); 
System.out.println(j); // 6.0 

double k = Math.round(-5.4); 
System.out.println(k); // -5.0 

double l = Math.round(-5.6); 
System.out.println(l); // -6.0 

如果你只是想擺脫的小數位,鑄造是就好了。

如果你想舍入到下一個較小的值,Math.floor是你的朋友。

如果你想圍繞我們大多數人在學校學到的方式,Math.round會做。

爲了將來的參考,您可以假設基本的數學運算(如向上/向下舍入)在相應的庫中實現,因此不會因爲快速搜索該主題而受到影響。