爪哇 - 格式双值金额(Java - format double value as dollar a

2019-06-21 20:40发布

我需要格式化双“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) + ".");
}

Answer 1:

使用NumberFormat.getCurrencyInstance() :

double amt = 123.456;    

NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));

输出:

$123.46


Answer 2:

您可以使用一个DecimalFormat

DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(amt));

这会给你打印出带有总是2DP。

不过说真的,你应该用BigDecimal的钱,因为浮点问题



Answer 3:

使用DecimalFormat中所需的格式如打印十进制值

DecimalFormat dFormat = new DecimalFormat("#.00");
System.out.println("$" + dFormat.format(amt));

如果你想显示不是试图美国数字格式$量:

DecimalFormat dFormat = new DecimalFormat("####,###,###.00");
System.out.println("$" + dFormat.format(amt));

使用.00 ,它总是打印,不论其存在的两个小数点。 如果你想打印十进制它们存在,只有当再使用.##格式的字符串。



Answer 4:

您可以使用printf进行一个衬垫

System.out.printf("The original balance is $%.2f.%n", cardBalance);

这将始终打印小数点后两位,四舍五入的要求。



Answer 5:

使用BigDecimal的,而不是双货币类型。 在Java谜题本书中,我们看到:

System.out.println(2.00 - 1.10);

你可以看到它不会是0.9。

的String.format()有格式化数字模式。



文章来源: Java - format double value as dollar amount