Rubyの%演算子を使うと、C言語のsprintfのような書式指定で文字列をフォーマットできる。
基本的な使い方
文字列に%演算子を使い、右辺に値を指定する。
"Hello, %s!" % "World"
# => "Hello, World!"
"今日は%d件のタスクがある" % 5
# => "今日は5件のタスクがある"
フォーマット指定子
主なフォーマット指定子は以下の通り。
| 指定子 | 説明 |
|---|---|
%s | 文字列 |
%d | 整数(10進数) |
%f | 浮動小数点の数値 |
%e | 指数表記 |
%x | 16進数(小文字) |
%X | 16進数(大文字) |
%o | 8進数 |
%b | 2進数 |
"%d" % 255 # => "255"
"%x" % 255 # => "ff"
"%X" % 255 # => "FF"
"%o" % 255 # => "377"
"%b" % 255 # => "11111111"
"%e" % 12345.6 # => "1.234560e+04"
複数の値を渡す
複数の値を渡す場合は配列を使う。
"Name: %s, Age: %d" % ["Alice", 25]
# => "Name: Alice, Age: 25"
幅と配置
右揃え
%の後に数値を指定すると幅を設定でき、デフォルトは右揃えになる。
"%10s" % "hi" # => " hi"
左揃え
-を付けると左揃えになる。
"%-10s" % "hi" # => "hi "
0埋め
0を付けるとスペースの代わりに0で埋める。
"%010d" % 42 # => "0000000042"
精度
浮動小数点の数値は.の後に桁数を指定して精度を設定できる。
"%.2f" % 3.14159 # => "3.14"
"%.4f" % 3.14159 # => "3.1416"
"%8.2f" % 3.14159 # => " 3.14"
名前付き参照
%{キー名}の形式でHashのキーを参照できる。
"%{name}は%{age}歳" % { name: "Alice", age: 25 }
# => "Aliceは25歳"
複数箇所で同じキーを参照できる。
"[%{env}] %{msg} (env: %{env})" % { env: "production", msg: "Deploy完了" }
# => "[production] Deploy完了 (env: production)"
Pythonにも同様の演算子
Pythonにも同様の%演算子がある。基本的な書式指定子はRubyと共通だが、以下の点が異なる。
- 複数の値はタプルで渡す(Rubyは配列)
- 名前付き参照は
%(キー名)sの形式(Rubyは%{キー名})
"Hello, %s!" % "World"
# => "Hello, World!"
"Name: %s, Age: %d" % ("Alice", 25)
# => "Name: Alice, Age: 25"
"%(name)sは%(age)d歳" % {"name": "Alice", "age": 25}
# => "Aliceは25歳"
なお、Pythonではこの%形式は「旧スタイル」と位置付けられており、現在はstr.format()やf文字列が推奨されている。
\第一線のプログラマーの行動原理を学べる!/
