2017-04-07 8 views
3

このコードスニペットは過去1時間ほど私を悩ませています。基本的に私のプログラムの仕事の一部は、一種の表形式でデータを表示することです。ただ残っていることは、出力を素敵に見せて、話すことです。事は、私は、NetBeans上でコマンドを実行しようとしたら、私は思える、ある表形式/ printf Javaアシスタンスの間隔

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 - Image Linkを見て、次にコードを見てください。右に数字「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));