why does java turn a number that would otherwise be 10 into something like 9.999999999999998? here is my code. also, any suggestions on good practice would be appreciated. for example, what i can do in place of all the if statements. the purpose of my code is to take in input of what something costs and how much was paid. the output would be the difference and the resulting dollars and coins that must be returned. here is the code i'm having difficulty with.
package another;
import javax.swing.JOptionPane;
/**
*
* @author Will
*/
public class Another {
public static void tryAgain() {
JOptionPane.showMessageDialog(null, "Enter a valid amount and try again");
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String purchase = JOptionPane.showInputDialog("Please enter a the purchase amount");
if (purchase == null) {
System.exit(0);
}
if (purchase.isEmpty()) {
tryAgain();
}
for (int i = 0; i < purchase.length(); i = i + 1) {
if (!Character.isDigit(purchase.charAt(i))
&& !purchase.contains(".")) {
tryAgain();
}
}
String given = JOptionPane.showInputDialog("Please enter the given amount");
if (given == null) {
System.exit(0);
}
if (given.isEmpty()) {
tryAgain();
}
for (int i = 0; i < given.length(); i = i + 1) {
if (!Character.isDigit(given.charAt(i))
&& !given.contains(".")) {
tryAgain();
}
}
Double a = Double.parseDouble(purchase);
Double b = Double.parseDouble(given);
Double c = b - a;
if (c < 0) {
JOptionPane.showMessageDialog(null, "Give the cashier more money!");
System.exit(0);
}
System.out.println( "Change: $" + c);
if (c > 100) {
double hundredsPlusExtra = c / 100;
double hundredsWithout = Math.floor(hundredsPlusExtra); //this line rounds down
c = c - hundredsWithout * 100;
if (hundredsWithout == 1) {
System.out.println(hundredsWithout + " One-Hundred Dollar Bill");
} else {
System.out.println(hundredsWithout + " Hundred Dollar Bills");
}
}
if (c > 50) {
double fiftiesPlusExtra = c / 50;
double fiftiesWithout = Math.floor(fiftiesPlusExtra); //this line rounds down
c = c - fiftiesWithout * 50;
if (fiftiesWithout == 1) {
System.out.println(fiftiesWithout + " Fifty Dollar Bill");
} else {
System.out.println(fiftiesWithout + " Fifty Dollar Bills");
}
}
if (c > 20) {
double twentiesPlusExtra = c / 20;
double twentiesWithout = Math.floor(twentiesPlusExtra); //this line rounds down
c = c - twentiesWithout * 20;
if (twentiesWithout == 1) {
System.out.println(twentiesWithout + " Twenty Dollar Bill");
} else {
System.out.println(twentiesWithout + " Twenty Dollar Bills");
}
}
if (c > 10) {
double tensPlusExtra = c / 10;
double tensWithout = Math.floor(tensPlusExtra); //this line rounds down
c = c - tensWithout * 10;
if (tensWithout == 1) {
System.out.println(tensWithout + " Ten Dollar Bill");
} else {
System.out.println(tensWithout + " Ten Dollar Bills");
}
}
if (c > 5) {
double fivesPlusExtra = c / 5;
double fivesWithout = Math.floor(fivesPlusExtra); //this line rounds down
c = c - fivesWithout * 5;
if (fivesWithout == 1) {
System.out.println(fivesWithout + " Five Dollar Bill");
} else {
System.out.println(fivesWithout + " Five Dollar Bills");
}
}
if (c > 1) {
double onesPlusExtra = c / 1;
double onesWithout = Math.floor(onesPlusExtra); //this line rounds down
c = c - onesWithout * 1;
if (onesWithout == 1) {
System.out.println(onesWithout + " One Dollar Bill");
} else {
System.out.println(onesWithout + " One Dollar Bills");
}
}
if (c > .25) {
double quartersPlusExtra = c / .25;
double quartersWithout = Math.floor(quartersPlusExtra); //this line rounds down
c = c - quartersWithout * .25;
if (quartersWithout == 1) {
System.out.println(quartersWithout + " Quarter");
} else {
System.out.println(quartersWithout + " Quarters");
}
}
}
}