Ответ 1
Используйте NumberFormat.getCurrencyInstance():
double amt = 123.456;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));
Вывод:
$123.46
Мне нужно отформатировать двойной "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) + ".");
}
Используйте NumberFormat.getCurrencyInstance():
double amt = 123.456;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
System.out.println(formatter.format(amt));
Вывод:
$123.46
Вы можете использовать DecimalFormat
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(amt));
Это даст вам распечатку с всегда 2dp.
Но на самом деле, вы должны использовать BigDecimal за деньги, из-за проблем с плавающей точкой
Используйте 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
, он всегда печатает две десятичные точки независимо от их присутствия. Если вы хотите печатать десятичные числа только тогда, когда они присутствуют, используйте .##
в строке формата.
Вы можете использовать printf для одного лайнера
System.out.printf("The original balance is $%.2f.%n", cardBalance);
Это всегда будет печатать два десятичных знака, округляя по мере необходимости.
Используйте BigDecimal вместо double для типов валют. В книге Java Puzzlers мы видим:
System.out.println(2.00 - 1.10);
и вы увидите, что оно не будет 0.9.
String.format() имеет шаблоны для форматирования чисел.
NumberFormat in=NumberFormat.getCurrencyInstance();
double payment = 12324.134;
System.out.println("US: " + in.format(payment));
вывод: $ 12,324.13