33546


`%-8s%3d%5.1f`  
`%3.1f～：%2d`

これらはどういういみですか。コードでは下のようになっています。

[code]

    System.out.printf("%-8s%3d%5.1f\n", x[i].name, x[i].height, x[i].vision);
    
    System.out.printf("%3.1f～：%2d人\n", i / 10.0, vdist[i]);
    
[/code]


CC BY-SA 3.0
2017-03-26T05:18:00.923
33541
2022-02-21T12:37:20.523
2017-03-28T21:09:55.863
3054
20666
question
java
printf に指定する、パーセント記号を含んだ「%-8s%3d%5.1f」のような文字列の意味


出力するフォーマットを指定します。  
<https://docs.oracle.com/javase/tutorial/java/data/numberformat.html>  
<http://www.geocities.jp/bleis_tift/java/printf.html>  
<http://www.ne.jp/asahi/hishidama/home/tech/java/formatter.html>


CC BY-SA 3.0
2017-03-26T05:41:44.533
33543
2017-03-26T05:41:44.533
6148
33541
answer


これは[C言語のprintf関数](https://ja.wikipedia.org/wiki/Printf)由来の書き方で、データを文字列にする際にうまく整形
(フォーマット) するために使われるものです。たとえば`%d`は整数値を10進表記の文字列 ( **d** ecimal number)
にするもの、`%f`は浮動小数点数 ( **f** loating-point number) を10進表記の文字列にするものです。

[code]

    System.out.printf("3.14 + 3.14 の答えは %f です。", 3.14 + 3.14);
    // ==> "3.14 + 3.14 の答えは 6.280000 です。" と出力されます。
    
[/code]

単に`%f`とだけ書くと小数を表示するだけですが、表示する桁数を固定するなどもっと良い感じにしたい場合があります。そのためのオプションも用意されており、たとえば`%.2f`と書くと小数点以下2桁までに整形されます。

[code]

    System.out.printf("3.14 + 3.14 の答えは %.2f です。", 3.14 + 3.14);
    // ==> "3.14 + 3.14 の答えは 6.28 です。" と出力されます。
    
[/code]

質問文にあるのはすべてこの類のものです。いくつか列挙して説明します。

  * `%s`: 文字列 
    * `-`: 結果が左揃えになります。
    * 数字: 文字幅
    * たとえば`%-8s`だと文字幅8の左詰めで表示します。
  * `%d`: 10進表記の数値 
    * 数字: 桁数
    * たとえば`%3d`だと3桁以上の整数で表示します。
  * `%f`: 浮動小数点数 
    * 数字.数字: 全体の文字数と、小数点より下の桁数。
    * たとえば`%5.1f`だと、小数点より下は1桁、小数点も含めて5文字以上で表示します。

数字の部分を変えて実行しなおしたときにどう表示が変わるかを観察すると分かりやすいかもしれません。

また、ここで紹介したもの以外にもいくつかオプションがあります。  
より正確かつ詳しい情報については、以下のドキュメントを参考にしてください。

  * [書式文字列の構文 - クラスFormatter](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Formatter.html#syntax) \-- Java Platform, Standard Edition 8 API仕様


CC BY-SA 4.0
2017-03-26T07:33:50.807
33546
2022-02-21T12:37:20.523
2022-02-21T12:37:20.523
19110
19110
33541
answer