JAVA OptionPane.showMessageDialog output formatting for decimal - java

I am very new to Java and playing with displaying a message with GUI. So if use the console
System.out.printf("Your total montly bill is $%.2f", totalCost);
gives me the output with decimal the way it should. I am trying to do the same thing with this, but I get more digits after the decimal because totalCost is a type double. How can I format the output to only show two digits after the decimal? Thanks.
JOptionPane.showMessageDialog(null, "Your monthly payment is " + totalCost);

You could do:
JOptionPane.showMessageDialog(null, String.format("Your monthly payment is $%.2f", totalCost));

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
JOptionPane.showMessageDialog(null, "Your monthly payment is " + df.format(d));
System.out.println(df.format(d));
Class DecimalFormat API

You can also do:
JOptionPane.showMessageDialog(this, "Your monthly payment is " + totalCost);

DecimalFormat df = new DecimalFormat("#.##");
String hour = JOptionPane.showInputDialog("Please input your hourly salary: ");
double hr = Double.parseDouble(hour);
double dr = hr * 8;
double wr = hr * 40;
double mr = hr * 160;
double yr = mr * 12;
JOptionPane.showMessageDialog(null, "Yearly: " + df.format(yr) + " / " + "Monthly: "
+ df.format(mr) + " / " + "Weekly: "+ df.format(wr) + " / " + "Hour: " + df.format(hr),
"Yearly Salary Calculator by the hour", JOptionPane.OK_OPTION, icon);

Related

Cant properly format output

Im having trouble to find a way for formatting this:
System.out.println("Product price reported as $" + price + " before tax and $" + result + " after " + this.tax + " % tax"):
Im trying like this.
String formatDecimals = String.format("%.2f","Product price reported as $" + price + " before tax and $" + result + " after " + this.tax + " % tax"):
I want to have two decimals. Any help
You are trying to format a string as a float, this will not work. The whole text has to go into the "format" parameter:
String formatDecimals = String.format("Product price reported as $%.2f before tax and $%.2f after %.2f %% tax", price, result, this.tax);

Format to show percentages with decimal points

I need some tips on how to get my 2nd and 4th percentage in a ".5%" format because in my result I get the result correct but it prints in a whole percentage. So instead of it showing 4%, 4.5%, 5%, 5.5%, and 6% it gives. 4%, 4%, 5%, 6%, 6% but it still calculates the result correctly. Its like it doesn't show the 4.5% and 5.5%. Heres the code, it may seem long but its just repetitive numbers. Note aIR2 and aIR4, those are the targets
import java.util.Scanner;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class MortgageCalculator {
public static void main(String[] args) {
double aIR, mortgageAmount;
int noY;
double aIR1, aIR2, aIR3, aIR4, aIR5;
double mIR1, mIR2, mIR3, mIR4, mIR5;
double mPayment1, mPayment2, mPayment3, mPayment4, mPayment5;
double totAmount1, totAmount2, totAmount3, totAmount4, totAmount5;
double oPay1, oPay2, oPay3, oPay4, oPay5;
double oPaypercent1, oPaypercent2, oPaypercent3, oPaypercent4, oPaypercent5;
//This establishes formats for values
NumberFormat fmt1 = NumberFormat.getPercentInstance();
NumberFormat fmt2 = NumberFormat.getCurrencyInstance();
DecimalFormat fmt3 = new DecimalFormat("0.##");
//This asks user for inputs
Scanner scan = new Scanner(System.in);
System.out.println("Enter the Annual Interest Rate: ");
aIR= scan.nextDouble();
System.out.println("Enter the Number of Years you will Pay: ");
noY = scan.nextInt();
System.out.println("Enter Amount Borrowed from the Bank: ");
mortgageAmount = scan.nextInt();
//These will give annual interest rates depending on range
aIR1 = (aIR - 1)/100;
aIR2 = (aIR - 0.5)/100;
aIR3 = (aIR)/100;
aIR4 = (aIR + 0.5)/100;
aIR5 = (aIR + 1)/100;
//These give rates by month according to which rate being taken
mIR1 = (aIR1 / 12);
mIR2 = (aIR2 / 12);
mIR3 = (aIR3 / 12);
mIR4 = (aIR4 / 12);
mIR5 = (aIR5 / 12);
//This takes the amounts per month
mPayment1 = (mIR1 * mortgageAmount)/(1-(1/Math.pow((1+mIR1),12*noY)));
mPayment2 = (mIR2 * mortgageAmount)/(1-(1/Math.pow((1+mIR2),12*noY)));
mPayment3 = (mIR3 * mortgageAmount)/(1-(1/Math.pow((1+mIR3),12*noY)));
mPayment4 = (mIR4 * mortgageAmount)/(1-(1/Math.pow((1+mIR4),12*noY)));
mPayment5 = (mIR5 * mortgageAmount)/(1-(1/Math.pow((1+mIR5),12*noY)));
//This takes the total amount per year
totAmount1 = mPayment1 * (noY*12);
totAmount2 = mPayment2 * (noY*12);
totAmount3 = mPayment3 * (noY*12);
totAmount4 = mPayment4 * (noY*12);
totAmount5 = mPayment5 * (noY*12);
//This is the overpayment because of interest
oPay1 = totAmount1 - (mortgageAmount);
oPay2 = totAmount2 - (mortgageAmount);
oPay3 = totAmount3 - (mortgageAmount);
oPay4 = totAmount4 - (mortgageAmount);
oPay5 = totAmount5 - (mortgageAmount);
//This is the overpayment percentage
oPaypercent1 = (oPay1/mortgageAmount);
oPaypercent2 = (oPay2/mortgageAmount);
oPaypercent3 = (oPay3/mortgageAmount);
oPaypercent4 = (oPay4/mortgageAmount);
oPaypercent5 = (oPay5/mortgageAmount);
//Begins printing the results in a line
System.out.println("The Mortgage Amount is: "
+ fmt2.format(mortgageAmount));
System.out.println("The Number of Years the Mortgage is Held: " + noY);
System.out.println("Range of Interest Rates: " + fmt1.format(aIR1)
+ " - " + fmt1.format(aIR5));
System.out.println("Interest Rate Monthly Payment Total Payment"
+ " $ Overpayment % Overpayment");
//Prints first interest rate
System.out.println("" + fmt1.format(aIR1) + " " +
fmt2.format(mPayment1) + " " + fmt2.format(totAmount1)
+ " " + fmt2.format(oPay1) + " "
+ fmt1.format(oPaypercent1) + "");
//Prints second interest rate
System.out.println("" + fmt1.format(aIR2) + " " +
fmt2.format(mPayment2) + " " + fmt2.format(totAmount2)
+ " " + fmt2.format(oPay2) + " "
+ fmt1.format(oPaypercent2) + "");
//Prints third interest rate
System.out.println("" + fmt1.format(aIR3) + " " +
fmt2.format(mPayment3) + " " + fmt2.format(totAmount3)
+ " " + fmt2.format(oPay3) + " "
+ fmt1.format(oPaypercent3) + "");
//Prints fourth interest rate
System.out.println("" + fmt1.format(aIR4) + " " +
fmt2.format(mPayment4) + " " + fmt2.format(totAmount4)
+ " " + fmt2.format(oPay4) + " "
+ fmt1.format(oPaypercent4) + "");
//Prints fifth interest rate
System.out.println("" + fmt1.format(aIR5) + " " +
fmt2.format(mPayment5) + " " + fmt2.format(totAmount5)
+ " " + fmt2.format(oPay5) + " "
+ fmt1.format(oPaypercent5) + "");
}
}
If you want a NumberFormat that displays 4% and 4.5%, i.e. percentage values with a single optional fraction digit, do one of the following:
// Option 1
NumberFormat fmt = NumberFormat.getPercentInstance();
fmt.setMaximumFractionDigits(1);
// Option 2
NumberFormat fmt = new DecimalFormat("0.#%");
Formatting the interest rate should be changed to handle decimal percentage values.
import java.util.Scanner;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class HelloWorld {
public static void main(String[] args) {
double aIR, mortgageAmount;
int noY;
double aIR1, aIR2, aIR3, aIR4, aIR5;
double mIR1, mIR2, mIR3, mIR4, mIR5;
double mPayment1, mPayment2, mPayment3, mPayment4, mPayment5;
double totAmount1, totAmount2, totAmount3, totAmount4, totAmount5;
double oPay1, oPay2, oPay3, oPay4, oPay5;
double oPaypercent1, oPaypercent2, oPaypercent3, oPaypercent4, oPaypercent5;
//This establishes formats for values
NumberFormat fmt1 = new DecimalFormat("0.#%");
//NumberFormat fmt1 = NumberFormat.getPercentInstance();
NumberFormat fmt2 = NumberFormat.getCurrencyInstance();
DecimalFormat fmt3 = new DecimalFormat("0.##");
//This asks user for inputs
Scanner scan = new Scanner(System.in);
System.out.println("Enter the Annual Interest Rate: ");
aIR= scan.nextDouble();
System.out.println("Enter the Number of Years you will Pay: ");
noY = scan.nextInt();
System.out.println("Enter Amount Borrowed from the Bank: ");
mortgageAmount = scan.nextInt();
//These will give annual interest rates depending on range
aIR1 = (aIR - 1)/100;
aIR2 = (aIR - 0.5)/100;
aIR3 = (aIR)/100;
aIR4 = (aIR + 0.5)/100;
aIR5 = (aIR + 1)/100;
//These give rates by month according to which rate being taken
mIR1 = (aIR1 / 12);
mIR2 = (aIR2 / 12);
mIR3 = (aIR3 / 12);
mIR4 = (aIR4 / 12);
mIR5 = (aIR5 / 12);
//This takes the amounts per month
mPayment1 = (mIR1 * mortgageAmount)/(1-(1/Math.pow((1+mIR1),12*noY)));
mPayment2 = (mIR2 * mortgageAmount)/(1-(1/Math.pow((1+mIR2),12*noY)));
mPayment3 = (mIR3 * mortgageAmount)/(1-(1/Math.pow((1+mIR3),12*noY)));
mPayment4 = (mIR4 * mortgageAmount)/(1-(1/Math.pow((1+mIR4),12*noY)));
mPayment5 = (mIR5 * mortgageAmount)/(1-(1/Math.pow((1+mIR5),12*noY)));
//This takes the total amount per year
totAmount1 = mPayment1 * (noY*12);
totAmount2 = mPayment2 * (noY*12);
totAmount3 = mPayment3 * (noY*12);
totAmount4 = mPayment4 * (noY*12);
totAmount5 = mPayment5 * (noY*12);
//This is the overpayment because of interest
oPay1 = totAmount1 - (mortgageAmount);
oPay2 = totAmount2 - (mortgageAmount);
oPay3 = totAmount3 - (mortgageAmount);
oPay4 = totAmount4 - (mortgageAmount);
oPay5 = totAmount5 - (mortgageAmount);
//This is the overpayment percentage
oPaypercent1 = (oPay1/mortgageAmount);
oPaypercent2 = (oPay2/mortgageAmount);
oPaypercent3 = (oPay3/mortgageAmount);
oPaypercent4 = (oPay4/mortgageAmount);
oPaypercent5 = (oPay5/mortgageAmount);
//Begins printing the results in a line
System.out.println("The Mortgage Amount is: "
+ fmt2.format(mortgageAmount));
System.out.println("The Number of Years the Mortgage is Held: " + noY);
System.out.println("Range of Interest Rates: " + fmt1.format(aIR1)
+ " - " + fmt1.format(aIR5));
System.out.println("Interest Rate Monthly Payment Total Payment"
+ " $ Overpayment % Overpayment");
//Prints first interest rate
System.out.println("" + fmt1.format(aIR1) + " " +
fmt2.format(mPayment1) + " " + fmt2.format(totAmount1)
+ " " + fmt2.format(oPay1) + " "
+ fmt1.format(oPaypercent1) + "");
//Prints second interest rate
System.out.println("" + fmt1.format(aIR2) + " " +
fmt2.format(mPayment2) + " " + fmt2.format(totAmount2)
+ " " + fmt2.format(oPay2) + " "
+ fmt1.format(oPaypercent2) + "");
//Prints third interest rate
System.out.println("" + fmt1.format(aIR3) + " " +
fmt2.format(mPayment3) + " " + fmt2.format(totAmount3)
+ " " + fmt2.format(oPay3) + " "
+ fmt1.format(oPaypercent3) + "");
//Prints fourth interest rate
System.out.println("" + fmt1.format(aIR4) + " " +
fmt2.format(mPayment4) + " " + fmt2.format(totAmount4)
+ " " + fmt2.format(oPay4) + " "
+ fmt1.format(oPaypercent4) + "");
//Prints fifth interest rate
System.out.println("" + fmt1.format(aIR5) + " " +
fmt2.format(mPayment5) + " " + fmt2.format(totAmount5)
+ " " + fmt2.format(oPay5) + " "
+ fmt1.format(oPaypercent5) + "");
}
Output
Interest Rate Monthly Payment Total Payment $ Overpayment % Overpayment
4% $1,841.65 $110,499.13 $10,499.13 10.5%
4.5% $1,864.30 $111,858.12 $11,858.12 11.9%
5% $1,887.12 $113,227.40 $13,227.40 13.2%
5.5% $1,910.12 $114,606.97 $14,606.97 14.6%
6% $1,933.28 $115,996.81 $15,996.81 16%

how to round to two decimal places in java [duplicate]

This question already has answers here:
How do I round a double to two decimal places in Java? [duplicate]
(21 answers)
Closed 8 years ago.
final double YearDep= 0.15; //this is for each year a car loses of the value before
double HybridDepreciation= HybridCarCost * Math.pow(1-YearDep,5);
double HybridFuelCost=(Miles*5*GasCost)/HybridCarMPG;
double GasPowerDepreciation=GasPowerCost * Math.pow(1-YearDep,5);
double GasPowerFuelCost=(Miles *5*GasCost)/GasPowerMPG;
double HybridTotalCost=HybridCarCost - HybridDepreciation + HybridFuelCost;
double GasPowerTotalCost= GasPowerCost - GasPowerDepreciation + GasPowerFuelCost;
System.out.printf("The total cost for the " + HybridName + " " + "is" +" $"+ HybridTotalCost);
System.out.println();
System.out.printf("The total cost for the " + GasPowerName + " "+ "is" + " $"+ GasPowerTotalCost);
use DecimalFormat for this:
DecimalFormat df = new DecimalFormat(".00");
System.out.printf("The total cost for the " + HybridName + " " + "is" +" $"+ df.format(HybridTotalCost));
System.out.println();
System.out.printf("The total cost for the " + GasPowerName + " "+ "is" + " $"+ df.format(GasPowerTotalCost));
Or you can use
String.format("The total cost for the %s is $%.2f", HybridName ,HybridTotalCost)
DecimalFormat df = new DecimalFormat("#.00");
then
df.format(<your_value>);
Or
System.out.println( String.format( "%.2f", <your_value> ) );
You can use.
double roundOff1 = (double) Math.round(HybridTotalCost);
double roundOff2 = (double) Math.round(GasPowerTotalCost);
and you can also use.
DecimalFormat df = new DecimalFormat("###.##");
System.out.printf("The total cost for the " + HybridName + " " + "is" +" $"+ df.format(HybridTotalCost));
System.out.println();
System.out.printf("The total cost for the " + GasPowerName + " "+ "is" + " $"+df.format(GasPowerTotalCost));
double roundOff = Math.round(a*100)/100.0;
or
DecimalFormat number = new DecimalFormat("#.00");
number.format(new Double(2223.8990))

Syntax of DecimalFormatting Doubles

I'm new to java and I've hit a sort of 'syntax learning curve' here. I was wondering how I would get the Doubles in my program i.e. "rate", to format to "#.00"?
I assume I'd have to use "DecimalFormat" to do this but I'm not quite sure how to go about using it to achieve what I want in this situation:
StringTokenizer st = new StringTokenizer(reader.readLine());
while (st.hasMoreTokens())
{
DecimalFormat df = new DecimalFormat("#.00");
hours = Integer.parseInt(st.nextToken()); // Converts number of hours to double
rate = Double.parseDouble(st.nextToken()); // Converts rate to integer
totalCost += (hours * rate);
System.out.println("Rate = £" + rate + "\t" + "Hours = " + hours);
}
Unfortunately I'm still at the stage where the Oracle Documentation is 95% incomprehensible to me so any helpful insights here would be most welcome :)
EDIT: printout currently looks like this...
Rate = £8.0
Should look like this:
Rate = £8.00
I think this should work:
System.out.println("Rate = E" + df.format(rate) + "\t" + "Hours = " + hours);
You defined the DecimalFormat, but never used it in the printing.
Display it like this:
System.out.println("Rate = £" + df.format(rate) + "\t" + "Hours = " + hours);

Compounding interest program in Java

I'm trying to write this compounding interest program with a do while loop at the end and I cannot figure out how to print out the final amount.
Here is the code I have so far :
public static void main(String[] args) {
double amount;
double rate;
double year;
System.out.println("This program, with user input, computes interest.\n" +
"It allows for multiple computations.\n" +
"User will input initial cost, interest rate and number of years.");
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the initial cost?");
amount = keyboard.nextDouble();
System.out.println("What is the interest rate?");
rate = keyboard.nextDouble();
rate = rate/100;
System.out.println("How many years?");
year = keyboard.nextInt();
for (int x = 1; x < year; x++){
amount = amount * Math.pow(1.0 + rate, year);
}
System.out.println("For " + year + " years an initial " + amount + " cost compounded at a rate of " + rate + " will grow to " + amount);
String go = "n";
do{
System.out.println("Continue Y/N");
go = keyboard.nextLine();
}while (go.equals("Y") || go.equals("y"));
}
}
The trouble is, amount = amount * Math.pow(1.0 + rate, year);. You're overwriting the original amount with the calculated amount. You need a separate value to hold the calculated value while still holding the original value.
So:
double finalAmount = amount * Math.pow(1.0 + rate, year);
Then in your output:
System.out.println("For " + year + " years an initial " + amount +
" cost compounded at a rate of " + rate + " will grow to " + finalAmount);
EDIT: Alternatively, you can save a line, a variable, and just do the calculation inline, as such:
System.out.println("For " + year + " years an initial " + amount +
" cost compounded at a rate of " + rate + " will grow to " +
(amount * Math.pow(1.0 + rate, year)));

Categories