Rubyで小数第x位までを表示する
String#%
さらっとググると、
puts sprintf("%.1f", 0.11111)
puts 0.11111.round(1)
などが見つかる。
が、String#%を使った、もっと簡単な方法があった。
puts "%.1f" % 0.11111 # => 0.1
参考) http://ref.xaio.jp/ruby/classes/string/percent http://docs.ruby-lang.org/ja/2.0.0/method/String/i/=25.html
"%.1f" % 0.1
と "%.1f" .% 0.1
盲点というか、勉強になったのが、 anarchy golf の解答で、
puts "%.1f" .% 0.15 * 2
のような使い方をしているものがあった。
http://golf.shinh.org/p.rb?Convert+Radians+to+Degrees#Ruby2
一瞬、何が違うのか分からなかったが、
puts "%.1f" % 0.15 * 2 # => 0.10.1 puts "%.1f" .% 0.15 * 2 # => 0.3
確かに結果が違う。
.
を付けることで、計算の優先順位が変わったようだ。
よくよく考えれば、メソッド呼び出し時のカッコを省略しているので、
puts "%.1f" .% 0.15 * 2 # ↓ puts "%.1f".%(0.15 * 2)
となっている。
追記
@ebanさんから、↓に書いてあると教えていただいた。
Rubyist Magazine - るびまゴルフ 【第 2 回】
ちゃんと勉強してないことが露呈した...