The program works but the answers are wrong two decimal plac

The program works but the answers are wrong  two decimal places. $3500 has to be $35.00 $16500 has to be $16.50 and 5150 has to be $51.50 ? any suggestions

self2.java

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class self2 {

public static void main(String[] args)
{
//Construction
double rate = 10;
double overCharge = 1.10; // Over-baseline charge for KW used
double excessCharge = 1.25; // Excess charger for KW used
double tier1 = 350; // Cap of baseline KW used
double tier2 = 500; // Cap of over-baseline KW used
double over = 0;
double excess = 0;
double total= 0;
  
// Welcome
System.out.println(\"Southwet Power & Light \ Billing Statement\");
Scanner sc = new Scanner(System.in);
String choice = \"y\" ;
while (choice.equalsIgnoreCase(\"y\")){
// get the input from the user
System.out.println(\"Please enter your name (Last,First) > \");
String name = sc.nextLine();
System.out.println(\"Meter reading date >\");
String date = sc.next();
Scanner sc1 = new Scanner(System.in); // Scanner #1 for KW used input
int kwusedEntered = 0;
double base = 0;
boolean isValid = false;
while (isValid == false) {
try {
System.out.print(\"Electricity Used (KW) > \");
kwusedEntered = sc1.nextInt();
isValid = true;
  
// Get current date and time
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(\"MM/dd/yyyy\");
System.out.println(\"Date printed: \" + sdf.format(now));
System.out.println(\"Name:\"+ name);
System.out.println(\"Meter reading date : \" + date);
System.out.println(\"Electricity used (KW) : \" + kwusedEntered);
  
// Charges
if (kwusedEntered >= 0 && kwusedEntered <= 350) {
base = kwusedEntered * rate;
over = 0;
excess = 0;
} else if (kwusedEntered > 350 && kwusedEntered <= 500) {
base = tier1 * rate;
over = (kwusedEntered - tier1) * (rate * overCharge);
excess = 0;
} else if (kwusedEntered > 500) {
base = tier1 * rate;
over = (tier2 - tier1) * (rate * overCharge);
excess = (kwusedEntered - tier2) * (rate * excessCharge);
  
}
base = Math.round(base * 100) / 100;
over = Math.round(over * 100) / 100;
excess = Math.round(excess * 100) / 100;
total = base + over + excess;
  
System.out.println(base);
System.out.print(over);
System.out.println(excess);
System.out.println(total);
  
System.out.println(\"Thank you for letting us serve you!\ \") ;
sc.nextLine();
} catch(Exception e){
   e.printStackTrace();
}

}
}
  
}   
}

Output:

Southwet Power & Light
Billing Statement
Please enter your name (Last,First) >
Suresh, Murapaka
Meter reading date >
10/01/2016
Electricity Used (KW) > 400
Date printed: 10/11/2016
Name:Suresh, Murapaka
Meter reading date : 10/01/2016
Electricity used (KW) : 400
3500.0
550.00.0
4050.0
Thank you for letting us serve you!

Solution

Hi,

I have updated the code. It is working as expected. Highlgihted the code changes below.

self2.java

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class self2 {

public static void main(String[] args)
{
//Construction
double rate = 10;
double overCharge = 1.10; // Over-baseline charge for KW used
double excessCharge = 1.25; // Excess charger for KW used
double tier1 = 350; // Cap of baseline KW used
double tier2 = 500; // Cap of over-baseline KW used
double over = 0;
double excess = 0;
double total= 0;
  
// Welcome
System.out.println(\"Southwet Power & Light \ Billing Statement\");
Scanner sc = new Scanner(System.in);
String choice = \"y\" ;
while (choice.equalsIgnoreCase(\"y\")){
// get the input from the user
System.out.println(\"Please enter your name (Last,First) > \");
String name = sc.nextLine();
System.out.println(\"Meter reading date >\");
String date = sc.next();
Scanner sc1 = new Scanner(System.in); // Scanner #1 for KW used input
int kwusedEntered = 0;
double base = 0;
boolean isValid = false;
while (isValid == false) {
try {
System.out.print(\"Electricity Used (KW) > \");
kwusedEntered = sc1.nextInt();
isValid = true;
  
// Get current date and time
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(\"MM/dd/yyyy\");
System.out.println(\"Date printed: \" + sdf.format(now));
System.out.println(\"Name:\"+ name);
System.out.println(\"Meter reading date : \" + date);
System.out.println(\"Electricity used (KW) : \" + kwusedEntered);
  
// Charges
if (kwusedEntered >= 0 && kwusedEntered <= 350) {
base = kwusedEntered * rate;
over = 0;
excess = 0;
} else if (kwusedEntered > 350 && kwusedEntered <= 500) {
base = tier1 * rate;
over = (kwusedEntered - tier1) * (rate * overCharge);
excess = 0;
} else if (kwusedEntered > 500) {
base = tier1 * rate;
over = (tier2 - tier1) * (rate * overCharge);
excess = (kwusedEntered - tier2) * (rate * excessCharge);
  
}
base = base / 100;
over = over / 100;
excess = excess / 100;
total = base + over + excess;
DecimalFormat df = new DecimalFormat(\"0.00\");
  
System.out.println(df.format(base));
System.out.println(df.format(over));
System.out.println(df.format(excess));
System.out.println(df.format(total));
  
System.out.println(\"Thank you for letting us serve you!\ \") ;
sc.nextLine();
} catch(Exception e){
   e.printStackTrace();
}
}
}
  
}   
}

Output:

Southwet Power & Light
Billing Statement
Please enter your name (Last,First) >
Suresh, Murapaka
Meter reading date >
11/11/2016
Electricity Used (KW) > 500
Date printed: 10/12/2016
Name:Suresh, Murapaka
Meter reading date : 11/11/2016
Electricity used (KW) : 500
35.00
16.50
0.00
51.50
Thank you for letting us serve you!

Please enter your name (Last,First) >

The program works but the answers are wrong two decimal places. $3500 has to be $35.00 $16500 has to be $16.50 and 5150 has to be $51.50 ? any suggestions self2
The program works but the answers are wrong two decimal places. $3500 has to be $35.00 $16500 has to be $16.50 and 5150 has to be $51.50 ? any suggestions self2
The program works but the answers are wrong two decimal places. $3500 has to be $35.00 $16500 has to be $16.50 and 5150 has to be $51.50 ? any suggestions self2
The program works but the answers are wrong two decimal places. $3500 has to be $35.00 $16500 has to be $16.50 and 5150 has to be $51.50 ? any suggestions self2

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site