Как я могу округлить число с плавающей запятой до двух десятичных знаков, включить текущий месяц и год и исправить свое значение l oop? - PullRequest
0 голосов
/ 14 марта 2020
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class carwip
{
  public static void main(String args[])
  {
    Scanner sc=new Scanner(System.in);
    int sedan, truck, suv, comm1, comm2, comm3;
    float base_salary=3200.45f;
    float tax=.08f;
    char answer;
    Calendar cal = Calendar.getInstance();
    int currentMonth = cal.get(Calendar.MONTH) + 1;
    int currentYear = cal.get(Calendar.YEAR);

    System.out.println("Please enter your name.");
    String name=sc.nextLine();

    System.out.println("How many sedans have you sold this month?");
    sedan=sc.nextInt();
    System.out.println("How many trucks have you sold this month?");
    truck=sc.nextInt();
    System.out.println("How many SUVs have you sold this month?");
    suv=sc.nextInt();

    do{

        if(sedan<=10)
        {
            comm1=85*sedan;
        }
        else if(sedan<=20 && sedan>10)
        {
            comm1=120*sedan;
        }
        else
        {
            comm1=180*sedan;
        }


        if(truck<=10)
        {
            comm2=100*truck;
        }
        else if(truck<=20 && truck>10)
        {
            comm2=120*truck;
        }
        else
        {
            comm2=180*truck;
        }



        if(suv<=10)
        {
            comm3=100*suv;
        }
        else if(suv<=20 && suv>10)
        {
            comm3=150*suv;
        }
        else
        {
            comm3=250*suv;
        }
        System.out.println("How many sedans you have sold this month: " +sedan);
        System.out.println("Your commission for the sedan sale is: $" +comm1);

        System.out.println("How many trucks you have sold this month: " +truck);
        System.out.println("Your commission for the truck sale is: $" +comm2);

        System.out.println("How many SUV you have sold this month: " +suv);
        System.out.println("Your commission for the SUV sale is: $" +comm3);

        System.out.println((name) + ", your gross salary for before deduction is: $" + (base_salary + comm1 + comm2 + comm3));
        float gross= base_salary + comm1 + comm2 + comm3;
        System.out.println((name) + ", your net salary for(Month/Year) after tax deduction is: $" + (gross - (gross * 0.08)));
        System.out.println("Do you want to calculate salary for(Month/Year) another person? Type 'Y' for yes, and 'N' for no.");
        answer = sc.next().charAt(0);
        System.out.println("Thanks for using this system.");


    }while(answer == 'Y' || answer == 'y');

   }
}

Вывод, который я получаю, верен до тех пор, пока не будет распечатана зарплата net, которая в качестве примера составит $ 3533.213955078125. Я хотел бы знать, как получить его всего за 3533,21 доллара, и я попробовал NumberFormat, но не был уверен, как это работает. Я импортировал календарь и некоторые переменные, но как я могу правильно поместить его в свой код, где написано (Месяц / Год, где Месяц - это фактическое название месяца, а не номер)? И наконец, когда я вводю Y / y в конце в l oop, он повторяет только предыдущий вывод и не возвращает l oop в начало.

Ответы [ 3 ]

1 голос
/ 14 марта 2020
import java.text.DecimalFormat

import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.text.DecimalFormat;
public class carwip
{
    private static DecimalFormat df = new DecimalFormat("0.00");

  public static void main(String args[])
  {
    Scanner sc=new Scanner(System.in);
    int sedan, truck, suv, comm1, comm2, comm3;
    float base_salary=3200.45f;    
    float tax=.08f;
    char answer;
    Calendar cal = Calendar.getInstance();
    int currentMonth = cal.get(Calendar.MONTH) + 1;
    int currentYear = cal.get(Calendar.YEAR);

    System.out.println("Please enter your name.");
    String name=sc.nextLine();

    System.out.println("How many sedans have you sold this month?");
    sedan=sc.nextInt();
    System.out.println("How many trucks have you sold this month?");
    truck=sc.nextInt();
    System.out.println("How many SUVs have you sold this month?");
    suv=sc.nextInt();

    do{

        if(sedan<=10)
        {
            comm1=85*sedan;
        }
        else if(sedan<=20 && sedan>10)
        {
            comm1=120*sedan;
        }
        else
        {
            comm1=180*sedan;
        }


        if(truck<=10)
        {
            comm2=100*truck;
        }
        else if(truck<=20 && truck>10)
        {
            comm2=120*truck;
        }
        else
        {
            comm2=180*truck;
        }



        if(suv<=10)
        {
            comm3=100*suv;
        }
        else if(suv<=20 && suv>10)
        {
            comm3=150*suv;
        }
        else
        {
            comm3=250*suv;
        }
        System.out.println("How many sedans you have sold this month: " +sedan);
        System.out.println("Your commission for the sedan sale is: $" +comm1);

        System.out.println("How many trucks you have sold this month: " +truck);
        System.out.println("Your commission for the truck sale is: $" +comm2);

        System.out.println("How many SUV you have sold this month: " +suv);
        System.out.println("Your commission for the SUV sale is: $" +comm3);

        System.out.println((name) + ", your gross salary for before deduction is: $" + df.format((base_salary + comm1 + comm2 + comm3)));
        float gross= base_salary + comm1 + comm2 + comm3;
        System.out.println((name) + ", your net salary for(Month/Year) after tax deduction is: $" + df.format((gross - (gross * 0.08))));
        System.out.println("Do you want to calculate salary for(Month/Year) another person? Type 'Y' for yes, and 'N' for no.");
        answer = sc.next().charAt(0);
        System.out.println("Thanks for using this system.");


    }while(answer == 'Y' || answer == 'y');

   }
}
0 голосов
/ 15 марта 2020

java .time

В то время как другие ответили на часть о двух десятичных знаках, вот способ напечатать текущий месяц с названием месяца.

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM/uuuu", Locale.ENGLISH);

    YearMonth thisMonth = YearMonth.now(ZoneId.of("Australia/Hobart"));
    String formattedMonth = thisMonth.format(monthFormatter);

    System.out.println("How many sedans have you sold in " + formattedMonth + "?");

Когда я запустил код сегодня, результат был:

Сколько седанов вы продали в марте / 2020?

(надеюсь, их было не так много, мир нуждается в нас, чтобы вести меньше.) Укажите желаемый часовой пояс, в который я поместил Австралию / Хобарт, поскольку месяц не меняется одновременно во всех часовых поясах.

В коде MMMM/uuuu - шаблон формата строка . MMMM означает, что нам нужно полное название месяца (без аббревиатуры), а uuuu - это год (в случае текущего года вы можете использовать uuuu и yyyy взаимозаменяемо). И Locale.ENGLISH - это язык, на котором мы хотим название месяца. Java знает названия месяцев на любом языке.

Я использую и рекомендую java .time, современный Java API даты и времени. Класс Calendar, который вы использовали, и даже класс SimpleDateFormat, который вы импортировали, плохо спроектированы и давно устарели. Нет никаких причин, по которым мы должны бороться с этими в 2020 году.

Исправление l oop

Наконец, когда я вводю Y / y в конце в l oop, он повторяет только предыдущий вывод и не возвращает l oop в начало.

Вам нужно поместить 8 строк из System.out.println("Please enter your name."); внутри l oop, то есть после линия do{. После того, как вы попробовали это, я думаю, вы поймете, почему это решает проблему.

Ссылка

Oracle учебник: Дата Время объяснение, как использовать java .time.

0 голосов
/ 14 марта 2020

Вы можете использовать BigDecimal:

 public static void main(String[] args) {
        BigDecimal bd = new BigDecimal("123456789.0123456890");
        bd = bd.setScale(2, BigDecimal.ROUND_DOWN);
        System.out.println(bd);
    }

Результат

Выполнить: 123456789.01 BUILD SUCCESSFUL (общее время: 1 секунда)

...