PDA

View Full Version : [Java]


punx
10-13-2005, 05:43 PM
Hello once again. I am trying to round a double to the nearest Integer, and display the answer in a DoubleField for a GUI application. I've tried to cast the variable being used to type int, and tried using the Format.justify method. Here's the code, any help would be appriciated. Thanks.

/**
*Calculates the population growth
**/

import javax.swing.*;
import BreezySwing.*;
import BreezySwing.Format;
public class PopulationGrowth extends GBFrame
{
private JLabel initialOrganismsLabel;
private JLabel growthRateLabel;
private JLabel hoursLabel;
private JLabel growthHoursLabel;
private DoubleField initialOrganismsField;
private DoubleField growthRateField;
private DoubleField hoursField;
private DoubleField growthHoursField;
private DoubleField totalOrganismsField;
private JButton calculateButton;

//*************************Constructor Method***********************************
public PopulationGrowth()
{
initialOrganismsLabel = addLabel ("Initial Organisms" ,1,1,1,1);
initialOrganismsField = addDoubleField (0.0 ,1,2,1,1);
growthRateLabel = addLabel ("Growth Rate" ,2,1,1,1);
growthRateField = addDoubleField (0.0 ,2,2,1,1);
hoursLabel = addLabel ("Hours to achieve this rate" ,3,1,1,1);
hoursField = addDoubleField (0.0 ,3,2,1,1);
growthHoursLabel = addLabel ("Hours to grow" ,4,1,1,1);
growthHoursField = addDoubleField (0.0 ,4,2,1,1);
totalOrganismsField = addDoubleField (0 ,5,1,2,2);
calculateButton = addButton ("Calculate Population" ,6,2,1,1);
}
//******************************************************************************

public void buttonClicked (JButton buttonObj)
{
double initialOrganisms,
growthRate,
hours,
growthHours,
growPeriod,
totalOrganisms = 0;

if (buttonObj == calculateButton)
{
initialOrganisms= initialOrganismsField.getNumber();
growthRate = growthRateField.getNumber();
hours = hoursField.getNumber();
growthHours = growthHoursField.getNumber();
growPeriod = hours / growthHours;
totalOrganisms = (int)initialOrganisms * Math.pow(growthRate,growPeriod);
double temp = Format.justify('l' ,totalOrganisms, 25, 0);
totalOrganismsField.setNumber(temp);
}
}

public static void main (String[] args)
{
PopulationGrowth GUI = new PopulationGrowth(); //Instantiate the GUI window
GUI.setSize (500, 400); //Set the size of the program
GUI.setVisible (true); //Shows the program
}
}

squirellplaying
10-13-2005, 06:30 PM
Have you tried adding .5 then converting to an Int?

totalOrganisms = (int)((initialOrganisms * Math.pow(growthRate,growPeriod))+.05);

This method will do the math first, then round. Since converting to an Int from a double just cuts off everything after the decimal, adding .5 will "round up" correctly.

TheShaner
10-13-2005, 07:38 PM
Requires the import of java.lang.Math:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html#round(double)

Squirrel's implementation will work too, except you should cast it as a long instead of an int, because depending on how big your number gets, you may end up truncating the value big time.

-Shane

punx
10-14-2005, 04:52 PM
Thanks guys, that helped out alot.