2014-10-24 2 views
0

В настоящее время я пытаюсь заставить мою программу округлить до двух знаков после запятой, но, похоже, неспособен. Вот мой код:Слишком много десятичных знаков при использовании Java?

double ounce; 
double grams; 
grams = 0.00; 
System.out.println("This programme will print a table that can be used to convert ounces to grams, from values 1-15."); 
System.out.println("One ounce is equal to 28.35 grams.\n\nOunces \t\t\t Grams"); 

ounce = 0; 
do { 
    ounce++; 
    grams+=28.35; 
    System.out.println((""+ounce+"\t\t\t"+grams+"")); 
} while (ounce <15); 

Результат выглядит следующим образом:

Ounces   Grams 
1.0     28.35 
2.0     56.7 
3.0     85.05000000000001 
4.0     113.4 
5.0     141.75 
6.0     170.1 
7.0     198.45 
8.0     226.79999999999998 
9.0     255.14999999999998 
10.0     283.5 
11.0    311.85 
12.0    340.20000000000005 
13.0    368.55000000000007 
14.0     396.9000000000001 
15.0   425.2500000000001 

Наконец, мои номера под «г», не выравнивая точно правильный. Любые идеи, как заставить их идеально совмещаться?

+0

Этот вывод, похоже, не поступает из этого кода, так как 'gramsFormated' не изменяется в вашем цикле. Каков реальный код? – RealSkeptic

+0

Я не уверен, что вы имеете в виду. Я мог бы попробовать и изменить его, но это код. Посмотрев на этот код, я понимаю, что могу просто использовать «граммы», а не «gramsFormated», если это то, что вы имеете в виду. ** edit ** Я немного изменил свой код, но результат не изменился. –

+0

Что я имел в виду, так это то, что вы не вставляли код, который фактически создавал выведенный вами результат. С «граммами» это имеет смысл. Если это был 'gramsFormatted', то с этим кодом он бы напечатал одно и то же значение во всех строках. В любом случае, теперь вы не форматируете его вообще. – RealSkeptic

ответ

4

Вы можете использовать метод другого выхода, как это:

  System.out.format("%f%5f\n",ounce, gramsFormated); 

Вы можете решить, как вы хотите, чтобы ваша ширину. В этом примере это 5.

+0

К сожалению, это не работает для меня, так как мне нужна каждая строка кода для отдельной строки, а не одна строка по горизонтали. –

+1

О, извините. Используйте это: System.out.format ("% f% 5f \ n", ounce, gramsFormated); – Mosa

+0

Кажется, что в строке 'System.out.format ("% f% 5f \ n ", ounce," \ t \ t \ t ", grams," "),' the \ t \ t \ t " вызывая проблемы с этим способом форматирования. Я не уверен, есть ли способ исправить это ... –

3

Если вы хотите правильно выровнять, а также округлить до нужного числа цифр, вы можете использовать метод System.out.format, как предположил Моза.

System.out.format("%5.2f%20.2f%n", ounce, grams); 

Примечание:

  • Формат делает все выравнивание для вас, нет необходимости добавлять закладки.
  • Принятый способ записи строки в строке форматирования составляет %n, а не \n.
  • Первая часть %5.2f говорит: напечатайте первый параметр в поле шириной 5 символов с двумя цифрами после десятичной точки.
  • Вторая часть %20.2f делает то же самое для второго параметра, только поле определяет ширину 20 символов. Это также создает расстояние между двумя столбцами. Разумеется, вы можете изменить эту ширину.