HappyGoLucky

Web系サーバーサイド寄りの自動化大好きエンジニアの徒然なるブログ

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 回】

ちゃんと勉強してないことが露呈した...