2021年1月29日星期五

Java handling large numbers very strangely

I've been working on a program for a class that uses mass and diameter to calculate a planet's gravity according to the equation g = (G*m)/0.5d^2. I keep getting one digit values only as opposed a mix of one and two digit values. For example: For earth I got 9.8 m/s^2, but for Jupiter (supposed to be 24.9) I got (2.49). This is what I've written thusfar.

public class PlanetGravity {    public static double fromScientificToDouble(String scientific) {      double output = Double.parseDouble(scientific.substring(0, scientific.indexOf("e")));      output *= Math.pow(10, Integer.parseInt(scientific.substring(scientific.indexOf("e") + 1)));      return output;  }    public static double calculateGravity(double d, String m) {      double output = (fromScientificToDouble("6.67e-11") * fromScientificToDouble(m));      System.out.println(output);      output = output / (Math.pow(0.0005 * d, 2));      System.out.println(output);      output = Double.parseDouble(Double.toString(output).substring(0, Double.toString(output).indexOf(".") + 3));      return output;  }    public static void printPlanet(String name, String diameter, String mass, String g) {      System.out.println("  " + name + "\t\t" + diameter + "\t\t" + mass + "\t" + g);  }    public static void main(String[] args) {      System.out.println("  \t\t\t     Planetary Data");      System.out.println("  Planet\t\tDiameter (km)\tMass (kg)\tg (m/s^2)");      System.out.println("-------------------------------------------------------------------");      printPlanet("Mercury", "4880", "3.30e23 ", Double.toString(calculateGravity(4880.0, "3.30e23")));      printPlanet("Venus ", "12103.6", "4.869e24", Double.toString(calculateGravity(12103.6, "4.869e24")));      printPlanet("Earth ", "12756.3", "5.972e24", Double.toString(calculateGravity(12756.3, "5.972e24")));      printPlanet("Mars  ", "6794", "6.4219e23", Double.toString(calculateGravity(6794, "6.4219e23")));      printPlanet("Jupiter", "142984", "1.900e27", Double.toString(calculateGravity(142984, "1.900e27")));      printPlanet("Saturn", "120536", "5.68e26 ", Double.toString(calculateGravity(120536, "5.68e26")));      printPlanet("Uranus", "51118", "8.683e25", Double.toString(calculateGravity(51118, "8.683e25")));      printPlanet("Neptune", "49532", "1.0247e26", Double.toString(calculateGravity(49532, "1.0247e26")));  }  

}

https://stackoverflow.com/questions/65964241/java-handling-large-numbers-very-strangely January 30, 2021 at 11:04AM

没有评论:

发表评论