Java can't add properly.

Caporegime
Joined
12 Mar 2004
Posts
29,962
Location
England
Or so it seems.

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:
I certainly hope that changes in the next computer revolution. :p Isn't there anyway to round or truncate the number each time it counts?
 
Back
Top Bottom