Планеты превышают числовое поле

У меня проблема с кодом ниже:

    public class Stargazing {
      public static void main(String args[]) {

      double planets = 840000;
      double numofsun = 2.5;
      double total = 0;

      System.out.println("Galaxy #"+"\t"+"Planets");

      for(int i=1;i<12;i++){
        double siSky= planets * numofsun;
        total+=siSky;
        System.out.println(i+"\t"+total);
      }
    }
  }

Программа предназначена для расчета количества планет в данной галактике, но проблема, как представляется, заключается в том, что как только число планет заканчивается миллионами и миллиардами, она начинает выводить числа, подобные этой:

5       1.05E7                                                                                                      
6       1.26E7                                                                                                      
7       1.47E7                                                                                                      
8       1.68E7                                                                                                      
9       1.89E7                                                                                                      
10      2.1E7                                                                                                       
11      2.31E7 

Я не знаю, что я должен поставить вместо двойника, чтобы добиться этого.

Кроме того, чтобы запятая появилась, например: 1 200 000 000

В итоге я добавлю больше столбцов, но крайне важно, чтобы эти столбцы были правильными, чтобы числа в других не выглядели такими прикольными.

1 ответ

Решение

Используйте длинные числа, а не целые, и используйте объект DecimalFormat, который использует группировку. Например,

import java.text.DecimalFormat;

public class Foo {
   private static final String FORMAT_STRING = "0";

   public static void main(String[] args) {
      DecimalFormat myFormat = new DecimalFormat(FORMAT_STRING);
      myFormat.setGroupingSize(3);
      myFormat.setGroupingUsed(true);

      System.out.println(myFormat.format(10000000000000L));
   }
}

Это выведет: 10 000 000 000 000

Изменить, или если вы должны использовать удваивается, вы всегда можете использовать System.out.printf(...) который использует возможности форматирования java.util.Formatter. Здесь вы можете указать ширину вашего числового вывода, количество десятичных знаков для включения и включить или нет разделители групп (с , флаг). Например:

public static void main(String args[]) {
  double planets = 840000;
  double numofsun = 2.5;
  double total = 0;
  System.out.println("Galaxy #" + "\t" + "Planets");
  for (int i = 1; i < 12; i++) {
     double siSky = planets * numofsun;
     total += siSky;
     System.out.printf("%02d: %,14.2f%n", i, total);
  }
}

Который возвращает:

Ключом к использованию printf является использование правильных спецификаторов формата.

  • %02d означает создание числовой строки из значения типа int, 2 знака в ширину, с начальным 0, если необходимо.
  • %,14.2f означает создать числовую строку из числа с плавающей запятой (обозначается f), то есть 14 символов в ширину, имеет 2 десятичных знака (как указано .2) и с группировкой выходных данных, как указано , флаг.
  • %n означает печатать новую строку, эквивалентную \n для печати или печати заявлений.

редактировать
Или, что еще лучше, используйте одинаковые спецификаторы формата для заголовка столбца String и строки данных Strings:

public class Stargazing {
   public static void main(String args[]) {
      double planets = 840000;
      double numofsun = 2.5;
      double total = 0;
      System.out.printf("%8s %13s%n", "Galaxy #", "Planets");
      for (int i = 1; i < 12; i++) {
         double siSky = planets * numofsun;
         total += siSky;
         System.out.printf("%-8s %,13.2f%n", i + ":", total);
      }
   }
}

Это распечатало бы:

Galaxy #       Planets
1:        2,100,000.00
2:        4,200,000.00
3:        6,300,000.00
4:        8,400,000.00
5:       10,500,000.00
6:       12,600,000.00
7:       14,700,000.00
8:       16,800,000.00
9:       18,900,000.00
10:      21,000,000.00
11:      23,100,000.00
Другие вопросы по тегам