2009-12-11 64 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; 
相关问题