Math#log10について
Math#log10は、その名の通り与えられた数値にlog10を適用した結果を出すメソッドです。
Math.log10(12_345_678) #>> 7.091514945509202
元の数値を3(=log10(1000))で割った結果を与えると……
(Math.log10(12_345_678) / 3) #>> 2.3638383151697338
そして、これをto_iすると、小数点以下が捨てられ桁数だけが出てきます。
Math.log10(12_345_678 / 3).to_i #>> 2
本題
と、上記を踏まえ数値を出した上で再度検証します。
この結果をcase文に適用すれば、アラ不思議。
あっという間に桁の接尾辞を出すメソッドができました。
module Helpers def scale(value) scale = (Math.log10(value) / 3).to_i suffix = case scale when 1; 'k' when 2; 'M' when 3; 'B' when 4; 'T' when 5; 'Q' else # < 1000 or > 10^15, no scale or suffix scale = 0 ' ' end "%10.3f#{suffix}" % (value.to_f / (1000 ** scale)) end module_function :scale end