我需要将双“amt”格式化为美元金额println(“$”+美元+“。”+美分),以便小数点后有两位数。
最好的方法是什么?
if (payOrCharge <= 1)
{
System.out.println("Please enter the payment amount:");
double amt = keyboard.nextDouble();
cOne.makePayment(amt);
System.out.println("-------------------------------");
System.out.println("The original balance is " + cardBalance + ".");
System.out.println("You made a payment in the amount of " + amt + ".");
System.out.println("The new balance is " + (cardBalance - amt) + ".");
}
else if (payOrCharge >= 2)
{
System.out.println("Please enter the charged amount:");
double amt = keyboard.nextDouble();
cOne.addCharge(amt);
System.out.println("-------------------------------");
System.out.println("The original balance is $" + cardBalance + ".");
System.out.println("You added a charge in the amount of " + amt + ".");
System.out.println("The new balance is " + (cardBalance + amt) + ".");
}
答案 0 :(得分:49)
使用NumberFormat.getCurrencyInstance():
double amt = 123.456;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));
输出:
$123.46
答案 1 :(得分:6)
您可以使用DecimalFormat
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(amt));
这将为您提供始终为2dp的打印输出。
但实际上,由于浮点问题,你应该使用BigDecimal来赚钱
答案 2 :(得分:6)
使用DecimalFormat
以所需格式打印小数值,例如
DecimalFormat dFormat = new DecimalFormat("#.00");
System.out.println("$" + dFormat.format(amt));
如果您希望以美国数字格式显示$ amount,请尝试:
DecimalFormat dFormat = new DecimalFormat("####,###,###.00");
System.out.println("$" + dFormat.format(amt));
使用.00
,它始终打印两个小数点,无论它们是否存在。如果只想存在十进制数,则在格式字符串中使用.##
。
答案 3 :(得分:3)
您可以将printf用于单线
System.out.printf("The original balance is $%.2f.%n", cardBalance);
这将始终打印两个小数位,根据需要进行舍入。
答案 4 :(得分:0)
对货币类型使用BigDecimal而不是double。 在Java Puzzlers一书中,我们看到:
System.out.println(2.00 - 1.10);
你可以看到它不会是0.9。
String.format()具有格式化数字的模式。