2017-04-07 12 views
3

그래서이 코드 스 니펫은 지난 1 시간 정도 나를 괴롭 히고 있습니다. 기본적으로, 내 프로그램의 작업의 일부는 일종의 표 형식으로 데이터를 표시하는 것입니다. 남은 것은 출력을 멋지게 보이게하는 것입니다. 내가 넷빈즈에서 명령을 실행하려고하면표 형식/printf 자바 지원의 간격

System.out.printf("%-20s %-20s %-20s %-20s %-20s%n", 
       "Part #:", "Description:", "Number Sold:", "Price:", "Total:"); 
System.out.println 
     ("---------------------------------------------------------------------------------------------------------------"); 
System.out.printf("%-20s %-20s %-20d %s%-20.2f %s%-20.2f%n", 
       "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99); 

것 나는 것,이다 : 여기

는 printf와 명령의 형식/구문의 관점에서 나를 귀찮게 됐어요 코드의 (예) 세그먼트 내 출력이 점점 수 :

enter image description here

을이 수에 작은 작은 들여 쓰기 바로 Total: 헤더 나를 귀찮게한다 울부 짖는 것을 정확하게 프로그램 차단 또는 큰 문제가 아니지만. 나는 지난 시간 동안 노력했습니다 정도로 완벽 "총"노호 정렬 된 "$ 9999.00"더블/float 값 얻기 위해


헤더를. 어떤 도움을 주시면 감사하겠습니다.

tl; dr - 이미지 링크를보고 코드를 확인하십시오. 숫자 오른쪽에 벨로우즈를 얻으려고하면 "Total"이 왼쪽으로 밀렸습니다. 도움?

+0

왜이처럼 끝나지 않는처럼 보일 수 있습니까? "... % s % -20.2f % s % -20.2f % n"(가운데 공백)? – Tupac

답변

0

엑스트라 $%s에있는 경우 예상 한 20 자보다 더 넓은 문자가 추가됩니다. 그 때문에 다음 열의 문자가 오른쪽으로 이동합니다. 당신이 pricetotal 열은 항상 20 개 문자를 포함 할 경우에 당신은

  • 처음 String.format("$%.2f",99.99) 같은 "$99,99" 문자열을 생성, 각 %-20.2f%-19.2f에 (%s를 가정하는 것은 하나 개의 문자를 개최한다) 절감에 대한 인수로 사용할 수 있습니다 %-20s (이는 %s%-20.2f을 대체합니다).

그래서 코드는

System.out.printf("%-20s %-20s %-20d %s%-19.2f %s%-19.2f%n", 
     "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99); 

또는

System.out.printf("%-20s %-20s %-20d %-20s %-20s%n", 
     "2304E", "Power Drill", 20, String.format("$%.2f",99.99), String.format("$%.2f",100*99.99));