Код неправильно форматируется
Сначала код выплевывал 1.0, когда я хотел 1.00. Итак, я использовал оператор if, чтобы исправить это. Тогда код даст .5, а не .50, поэтому я попробовал то же решение, но оно не сработало. Мне было интересно, могу ли я сделать средство форматирования, которое добавило бы дополнительный 0, если бы было только одно число справа от десятичной дроби, чтобы исправить мою проблему.
import java.util.Scanner;
public class addCoins {
public static void main(String[] args) {
int quarters, dimes, nickels, pennies;
Scanner input = new Scanner(System.in);
System.out.println("Enter in your total coins: ");
System.out.println();
System.out.print("Quarters: ");
quarters = input.nextInt();
System.out.print("Dimes: ");
dimes = input.nextInt();
System.out.print("Nickels: ");
nickels = input.nextInt();
System.out.print("Pennies: ");
pennies = input.nextInt();
System.out.println();
System.out.println(dollarAmount(quarters, dimes, nickels, pennies));
}
public static String dollarAmount(int quarters2, int dimes2, int nickels2, int pennies2) {
double total = (quarters2 * .25) + (dimes2 * .10) + (nickels2 * .05) + (pennies2 * .01);
if (total % 1.0 == 0 || total % .10 == .0) {
return "Total: $" + total + "0";
} else {
return "Total: $" + total;
}
}
}
.5 вместо .50
@Jens Я думаю, это сработает, но есть проблема. Я не могу отформатировать итоговую сумму из-за прикрепленной строки. Мне не разрешено избавляться от строки, потому что мой учитель сказал, что мне нужно добавить «Итого: $» к ответу. Я могу что-нибудь сделать.
Вы можете использовать форматировщик символов внутри метода String.format (). Я отвечу на этот вопрос, если не засну через 20 минут.




В вашем конкретном случае (ваш метод возвращает строку) один из способов сделать это - использовать метод Строка # формат (), как это коснулся @Taslim, это будет примерно так:
public static String dollarAmount(int quarters2, int dimes2, int nickels2, int pennies2) {
double total = (quarters2 * .25) + (dimes2 * .10) + (nickels2 * .05) + (pennies2 * .01);
return String.format("Total: $%.2f", total);
}
Еще один способ - использовать метод DecimalFormat # формат (), как уже упоминал @Jens, он будет выглядеть примерно так:
public static String dollarAmount(int quarters2, int dimes2, int nickels2, int pennies2) {
double total = (quarters2 * .25) + (dimes2 * .10) + (nickels2 * .05) + (pennies2 * .01);
DecimalFormat df = new DecimalFormat(".##", DecimalFormatSymbols.getInstance(Locale.US));
return "Total: $" + df.format(total);
}
DecimalFormatSymbols.getInstance (Locale.US), который вы видите в инициализации переменной DecimalFormat, используется, чтобы ваше числовое значение было представлено в числовом формате вашей конкретной страны.
И еще один, более длинный способ сделать это для меньших значений - использовать методы Математика # pow () и Математика # раунд (), например:
public static String dollarAmount(int quarters2, int dimes2, int nickels2, int pennies2) {
double total = (quarters2 * .25) + (dimes2 * .10) + (nickels2 * .05) + (pennies2 * .01);
long factor = (long) Math.pow(10, 2); // 2 is the decimal places
total = total * factor;
long tmp = Math.round(total);
return "Total: $" + String.valueOf((double) tmp / factor);
}
Однако для более крупных и сложных значений вы, возможно, захотите сделать это, используя метод BigDecimal # setScale (), который обеспечивает гораздо большую точность при выполнении расчетов со значениями типа данных Float или Double (которые неточны) .... что-то вроде этого:
public static String dollarAmount(int quarters2, int dimes2, int nickels2, int pennies2) {
double total = (quarters2 * .25) + (dimes2 * .10) + (nickels2 * .05) + (pennies2 * .01);
BigDecimal bd = new BigDecimal(total);
// The 2 used below is the decimal places. You can
// use whatever rounding mode you want.
bd = bd.setScale(2, RoundingMode.HALF_UP);
return "Total: $" + String.valueOf(bd.doubleValue());
}
Сделайте ваш выбор ;)
Взгляните на DecimalFormat docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.ht мл