2009-12-11 56 views
5

需要將我的答案舍入到最接近的第10位。小數點後第十位到最近的第10位

double finalPrice = everyMile + 2.8; 
    DecimalFormat fmt = new DecimalFormat("0.00"); 
    this.answerField.setText("£" + fmt.format(finalPrice) + " Approx"); 

上述代碼將整數舍入到最接近的10,但不會舍入小數。例如2.44應舍入爲2.40

+2

借調喬恩斯基特的最後一句話,請注意,沒有** **用十進制作爲X.1,X號。 2,x.3,x.4,x.6,x.7,x.8或x.9完全表示爲浮點數。 – 2009-12-11 12:48:57

+0

我不明白你說的是什麼 – 2009-12-11 12:59:21

+3

花時間理解它,因爲它很重要。 – 2009-12-11 13:18:01

回答

9

更改了一下模式進行硬編碼的最終零:

double finalPrice = 2.46; 
DecimalFormat fmt = new DecimalFormat("0.0'0'"); 
System.out.println("£" + fmt.format(finalPrice) + " Approx"); 

現在,如果你操縱真實世界的錢,你最好不要使用雙擊,但int或BigInteger的。

+0

MAGICAL。 lol 工作。所以說'0'意味着無論如何,物理上都將0作爲最終數字? – 2009-12-11 12:58:29

+0

是的,它的確如此。 – Jerome 2009-12-11 12:59:00

+0

甜蜜,感謝您的幫助。我在一個不同的論壇發佈了相同的東西,4小時後他們諷刺地認爲我得到了谷歌(我之前試過) 你們在哪裏超快速大聲笑 – 2009-12-11 13:02:21

10

改爲使用BigDecimal

你真的,真的不想使用二進制浮點的貨幣值。編輯:round()不允許你指定小數位,只有有效數字。這裏有一個稍微繁瑣的技術,但它的作品(假設你要截斷,基本):

import java.math.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     BigDecimal bd = new BigDecimal("20.44"); 
     bd = bd.movePointRight(1); 
     BigInteger floor = bd.toBigInteger(); 
     bd = new BigDecimal(floor).movePointLeft(1); 
     System.out.println(bd); 
    } 
} 

我想希望有這樣的一個簡單的方法...

+0

@彼得的答案給出了更簡單快捷的方法。 – Vadzim 2015-12-11 15:36:25

+1

@Vadzim:這是調用BigDecimal(double)構造函數,這很少是一個好主意IMO。我們仍然不知道OP在舍入和截斷方面想要做什麼。但是,嘿,有多種選擇是很好的... – 2015-12-11 15:45:50

0

編輯

試試這個:

double d = 25.642; 
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.'))); 
System.out.println(s); 

我知道這是一個笨方法,但它的作品。

+0

對不起,沒有工作 – 2009-12-11 13:00:13

6

此輸出2.40

BigDecimal bd = new BigDecimal(2.44); 
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2)); 
1

嘗試以下操作:

double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice)/10.0; 
相關問題