需要将我的答案舍入到最接近的第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
需要将我的答案舍入到最接近的第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
更改了一下模式进行硬编码的最终零:
double finalPrice = 2.46;
DecimalFormat fmt = new DecimalFormat("0.0'0'");
System.out.println("£" + fmt.format(finalPrice) + " Approx");
现在,如果你操纵真实世界的钱,你最好不要使用双击,但int或BigInteger的。
MAGICAL。 lol 工作。所以说'0'意味着无论如何,物理上都将0作为最终数字? – 2009-12-11 12:58:29
是的,它的确如此。 – Jerome 2009-12-11 12:59:00
甜蜜,感谢您的帮助。我在一个不同的论坛发布了相同的东西,4小时后他们讽刺地认为我得到了谷歌(我之前试过) 你们在哪里超快速大声笑 – 2009-12-11 13:02:21
改为使用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);
}
}
我想希望有这样的一个简单的方法...
@彼得的答案给出了更简单快捷的方法。 – Vadzim 2015-12-11 15:36:25
@Vadzim:这是调用BigDecimal(double)构造函数,这很少是一个好主意IMO。我们仍然不知道OP在舍入和截断方面想要做什么。但是,嘿,有多种选择是很好的... – 2015-12-11 15:45:50
编辑
试试这个:
double d = 25.642;
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.')));
System.out.println(s);
我知道这是一个笨方法,但它的作品。
对不起,没有工作 – 2009-12-11 13:00:13
此输出2.40
BigDecimal bd = new BigDecimal(2.44);
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2));
尝试以下操作:
double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice)/10.0;
借调乔恩斯基特的最后一句话,请注意,没有** **用十进制作为X.1,X号。 2,x.3,x.4,x.6,x.7,x.8或x.9完全表示为浮点数。 – 2009-12-11 12:48:57
我不明白你说的是什么 – 2009-12-11 12:59:21
花时间理解它,因为它很重要。 – 2009-12-11 13:18:01