Or so it seems.
petroldispensed results in numbers like 3.2000000000000015, how on earth can adding 0.1 to a number result in that output?
Code:
javax.swing.*;
import java.util.*;
public class PumpConsole
{
static int one, two, three, four, five;
static boolean nozzlesqueezed = true;
static boolean nozzleremoved = true;
static double petroldispensed = 0;
static double amountdue = 0;
static double priceperlitre = 0;
static double balance = 0;
static double totalpetroldispensed = 0;
static javax.swing.Timer petroldispenser;
public PumpConsole()
{
Runnable r = new Runnable()
{
public void run()
{
petroldispenser = new javax.swing.Timer(200, new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent e)
{
petroldispensed += 0.1;
amountdue += priceperlitre;
JOptionPane.showMessageDialog(null, "Petrol dispensed = "+petroldispensed);
JOptionPane.showMessageDialog(null, "Amount due = "+amountdue);
}
}
);
}};
if(javax.swing.SwingUtilities.isEventDispatchThread())
{
r.run();
}
else
{
javax.swing.SwingUtilities.invokeLater(r);
}
displayamountduelcd();
}
public void removenozzle()
{
nozzleremoved = true;
}
public void squeezenozzle()
{
if(nozzleremoved==false)
{
JOptionPane.showMessageDialog(null, "The nozzle must be removed first");
}
else
{
nozzlesqueezed = true;
petroldispenser.start();
}
}
public void numberconverter(double number)
{
if (number==amountdue){
one = (int) (number * Math.pow(10, 2) % 10);
two = (int) (number * Math.pow(10, 1) % 10);
three = (int) (number * Math.pow(10, 0) % 10);
four = (int) (number * Math.pow(10, -1) % 10);
five = (int) (number * Math.pow(10, -2) % 10);
}
if (number==priceperlitre){
one = (int) (number * Math.pow(10, 2) % 10);
two = (int) (number * Math.pow(10, 1) % 10);
three = (int) (number * Math.pow(10, 0) % 10);
four = (int) (number * Math.pow(10, -1) % 10);
}
if (number==petroldispensed){
one = (int) (number * Math.pow(10, 1) % 10);
two = (int) (number * Math.pow(10, 0) % 10);
three = (int) (number * Math.pow(10, -1) % 10);
}
}
public void displaypriceperlitrelcd()
{
numberconverter(priceperlitre);
sevensegmentdisplay d1 = new sevensegmentdisplay(one);
sevensegmentdisplay d2 = new sevensegmentdisplay(two);
sevensegmentdisplay d3 = new sevensegmentdisplay(three);
sevensegmentdisplay d4 = new sevensegmentdisplay(four);
}
public void displaypetroldispensedlcd()
{
numberconverter(petroldispensed);
sevensegmentdisplay d5 = new sevensegmentdisplay(two);
sevensegmentdisplay d6 = new sevensegmentdisplay(three);
sevensegmentdisplay d7 = new sevensegmentdisplay(four);
}
public void displayamountduelcd()
{
numberconverter(amountdue);
sevensegmentdisplay d8 = new sevensegmentdisplay(one);
sevensegmentdisplay d9 = new sevensegmentdisplay(two);
sevensegmentdisplay d10 = new sevensegmentdisplay(three);
sevensegmentdisplay d11 = new sevensegmentdisplay(four);
sevensegmentdisplay d12 = new sevensegmentdisplay(five);
}
public static void setpetrolprice(double newpriceperlitre)
{
if ((newpriceperlitre>=100)||(newpriceperlitre<=0))
{
JOptionPane.showMessageDialog(null, "Please enter a number between 0.01 and 99.99");
}
if (((Double.toString(newpriceperlitre)).length()<3)||(((Double.toString(newpriceperlitre))).length()>5))
{
JOptionPane.showMessageDialog(null, "Please enter a 1-4 digit number.");
}
else
{
priceperlitre = newpriceperlitre;
}
}
public void resetdisplay()
{
balance += amountdue;
totalpetroldispensed += petroldispensed;
amountdue = 0;
petroldispensed = 0;
}
public void displaypriceperlitre()
{
JOptionPane.showMessageDialog(null, priceperlitre);
}
public void displaydailytotals()
{
JOptionPane.showMessageDialog(null, "You have dispensed "+petroldispensed+ " litres today");
JOptionPane.showMessageDialog(null, "You have made £"+balance+" today");
}
public void displaydispensed()
{
JOptionPane.showMessageDialog(null, amountdue);
JOptionPane.showMessageDialog(null, petroldispensed);
}
public void resetdailytotals()
{
totalpetroldispensed = 0;
balance = 0;
}
}
petroldispensed results in numbers like 3.2000000000000015, how on earth can adding 0.1 to a number result in that output?
Last edited: