Java - 格式化双倍值作为美元金额

aja*_*0le 29 java double formatting

我需要将双"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) + ".");
}
Run Code Online (Sandbox Code Playgroud)

ars*_*jii 50

使用NumberFormat.getCurrencyInstance():

double amt = 123.456;    

NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));
Run Code Online (Sandbox Code Playgroud)

输出:

$123.46
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,您需要使用“import java.text.NumberFormat;”导入 util 在顶部。 (2认同)
  • 我不得不操纵它以确保我得到$符号.NumberFormat.getCurrencyInstance(locale.US) (2认同)

Yog*_*ngh 7

用于DecimalFormat以所需格式打印十进制值,例如

DecimalFormat dFormat = new DecimalFormat("#.00");
System.out.println("$" + dFormat.format(amt));
Run Code Online (Sandbox Code Playgroud)

如果您希望以美国数字格式显示$ amount,请尝试:

DecimalFormat dFormat = new DecimalFormat("####,###,###.00");
System.out.println("$" + dFormat.format(amt));
Run Code Online (Sandbox Code Playgroud)

使用时.00,它总是打印两个小数点而不管它们的存在.如果只想在它们存在时打印十进制,则使用.##格式字符串.


bli*_*zen 6

您可以使用DecimalFormat

DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(amt));
Run Code Online (Sandbox Code Playgroud)

这将为您提供始终2dp的打印输出.

但实际上,由于浮点问题,你应该使用BigDecimal来赚钱


Pet*_*rey 5

您可以将 printf 用于单衬

System.out.printf("The original balance is $%.2f.%n", cardBalance);
Run Code Online (Sandbox Code Playgroud)

这将始终打印两位小数,根据需要四舍五入。