需要将我的答案舍入到最近的10号。
double finalPrice = everyMile + 2.8;
DecimalFormat fmt = new DecimalFormat("0.00");
this.answerField.setText("£" + fmt.format(finalPrice) + " Approx");
上面的代码将整数舍入到最接近的10,但它不会舍入小数。例如2.44应舍入到2.40
答案 0 :(得分: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);
}
}
我希望有一种更简单的方法可以做到这一点......
答案 1 :(得分:9)
将模式更改为硬编码最终零:
double finalPrice = 2.46;
DecimalFormat fmt = new DecimalFormat("0.0'0'");
System.out.println("£" + fmt.format(finalPrice) + " Approx");
现在,如果你正在操纵现实世界的钱,你最好不要使用double,而是使用int或BigInteger。
答案 2 :(得分:6)
这会输出2.40
BigDecimal bd = new BigDecimal(2.44);
System.out.println(bd.setScale(1,RoundingMode.HALF_UP).setScale(2));
答案 3 :(得分:1)
尝试以下方法:
double finalPriceRoundedToNearestTenth = Math.round(10.0 * finalPrice) / 10.0;
答案 4 :(得分:0)
修改强>
试试这个:
double d = 25.642;
String s = String.format("£ %.2f", Double.parseDouble(String.format("%.1f", d).replace(',', '.')));
System.out.println(s);
我知道这是一种愚蠢的方式,但它确实有效。