вывод системы для двойных чисел в Java-программе - PullRequest
1 голос
/ 22 марта 2012

У меня есть программа, в которой я генерирую два двойных числа, добавляя несколько входных цен из файла на основе условия.

String str;
double one = 0.00;
double two = 0.00;
BufferedReader in = new BufferedReader(new FileReader(myFile));

while((str = in.readLine()) != null){
     if(str.charAt(21) == '1'){
         one += Double.parseDouble(str.substring(38, 49) + "." + str.substring(49, 51));
     }

     else{
         two += Double.parseDouble(str.substring(38, 49) + "." + str.substring(49, 51));
     }
   }

in.close();
System.out.println("One: " + one);
System.out.println("Two: " + two);      

Вывод похож на:

One: 2773554.02
Two: 6.302505836000001E7

Вопрос:

Ни один из входных данных не содержит более двух десятичных знаков. То, как один и два рассчитываются точно так же.

Тогда почему формат вывода такой:

Я ожидаю:

One: 2773554.02
Two: 63025058.36

Почему печать выполняется в двух разных форматах? Я хочу снова записать результаты в файл, и после десятичной точки должно быть только две цифры.

1 Ответ

1 голос
/ 22 марта 2012

Проблема с отсутствующей точностью вызвана использованием double.Используйте BigDecimal, чтобы избежать этого.

Для печати используйте DecimalFormat, например:

DecimalFormat format = new DecimalFormat("0.##");
System.out.println("One: " + format.format(one));
System.out.println("Two: " + format.format(two));

Документация для десятичного формата: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...