2013-11-27 3 views
1

У меня вопрос о том, как я должен использовать printf для сочетания нескольких форматов. В моем случае я пытаюсь дать число определенное количество пробелов, чтобы он идеально вписывался в таблицу, и я пытаюсь ограничить, сколько десятичных знаков разрешено. Ниже то, что я пытался с Printf:с использованием printf для смешанных нескольких форматов

System.out.printf("%1s%10s%27s%26s%28s%28s1.5d", typeOCar, startingMiles, endingMiles, Distance, gallons, MPG); 

, когда я исполняю свою программу, она показывает это:

run: 
               Gas & Mileage Calculations 

Car Type   Starting Miles    Ending Miles     Distance     Gallons    Miles/Gallon 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
Toyota Sequoia  15543      15565      22      16.5   1.33333333333333331.5dBUILD SUCCESSFUL (total time: 0 seconds) 

Любая помощь будет принята с благодарностью.

+0

Почему 1.5d? Где вы используете% x.yf? где x и y - числа? –

ответ

0
  1. Ваш последний спецификатор формата должен быть a f для номер с плавающей запятой с использованием чисел ширины и точности: например, %20.5f
  2. Многие из ваших спецификаторов String, %xs, вероятно, должны быть десятичными спецификациями, %xd, где x - это ширина формата.
  3. Если вы сделаете это изменение, то соответствующий аргумент должен быть десятичным числом, а не строкой.
  4. У вас слишком много спецификаторов формата для количества аргументов, которые вы передаете. Это не что иное, как базовая математика. Подсчитайте свои спецификаторы и свои параметры.
  5. Прочитайте Formatter API для получения дополнительной информации.
0
import java.text.DecimalFormat; 

затем использовать это в вашем коде:

DecimalFormat fmt = new DecimalFormat("00.##"); //0 = numbers before . and # numbers after . 

и преобразовать любое значение (например, здесь печатаются непосредственно):

System.out.println(fmt.format(varName)); 
Смежные вопросы