2017-07-31 112 views
-1

我想將一個double值舍入到下一個數字。四捨五入到最接近的下一個數字

嘗試使用Math.ceilMath.round但它沒有幫助。

下面是條件和代碼:

Double totalAsset = Util.convertToDouble(dataObject) * calculus; 

// 62072560. * 06433535204605706 = 399345.99999999994 

System.out.println(totalAsset.longValue()); 

,但我得到399345而應該是399346

+0

請定義「其餘」。 –

+0

休息意味着當我們從5開始的小數。它應該四捨五入 – sTg

+2

不,這仍然可能不是每個人都清楚。請顯示一系列數字以及您希望他們如何輪換。 –

回答

1

要打印,從而不會失去你可以使用任何DecimalFormat精度。

DecimalFormat df = new DecimalFormat("#.#"); 
double d = 1.899999; 
System.out.println(df.format(d)); 

否則,double的精確舍入會附加一些字符串。我建議閱讀這是我從撕開這個方法following answer

public static double round(double value, int places) { 
    if (places < 0) throw new IllegalArgumentException(); 

    BigDecimal bd = new BigDecimal(value); 
    bd = bd.setScale(places, RoundingMode.HALF_UP); 
    return bd.doubleValue(); 
} 

如果你想你的小區號碼,這仍然是我不清楚,你可以改變RoundingModeRoundingMode.CEILING。詳細瞭解RoundingMode here

0

可以添加If語句幫助嗎?

從縮小的結果(1234)中摘錄真實結果(1234,56),並檢查結果是否大於或等於0,5舍入或舍入爲< 0.5?

1

你的意思是這樣嗎? 每個println()語句打印399346.

public class Test { 
    public static void main(final String[] args) { 
     final long l0 = (long) Math.ceil(399345.1); //Becomes 399346 
     final long l1 = (long) Math.ceil(399345.5); //Becomes 399346 
     final long l2 = (long) Math.ceil(399345.6); //Becomes 399346 
     final long l3 = (long) Math.ceil(399345.7); //Becomes 399346 
     final long l4 = (long) Math.ceil(399345.8); //Becomes 399346 
     final long l5 = (long) Math.ceil(399345.9); //Becomes 399346 

     System.out.println(l0); //Prints 399346 
     System.out.println(l1); //Prints 399346 
     System.out.println(l2); //Prints 399346 
     System.out.println(l3); //Prints 399346 
     System.out.println(l4); //Prints 399346 
     System.out.println(l5); //Prints 399346 
    } 
} 
0

如果你不介意的開銷,比BigDecimal來拯救你:

final BigDecimal a = new BigDecimal("1.899999"); 
final BigDecimal b = new BigDecimal("1.911111"); 
System.out.println(a.setScale(1, RoundingMode.UP)); // prints 1.9 
System.out.println(b.setScale(1, RoundingMode.UP)); // prints 2.0