コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsにおける数値のto_sバリエーションをざっとまとめる

いろいろあるけど項目ごとにざっと見れるやつってあまりないので書いてみる

環境

$ bin/rails -v
Rails 5.2.2.1

種類

電話番号

1234567890.to_s(:phone)
#=> "123-456-7890"

(当たり前だけど)0始まりは数値だと許容しないからできない

0123456789.to_s(:phone)
SyntaxError: (eval):2: Invalid octal digit
0123456789.to_s(:phone)
^~~~~~~~~

通貨

1234567890.to_s(:currency)
#=> "$1,234,567,890.00"

localeで国の指定が可能、日本は円

1234567890.to_s(:currency, locale: :ja)
=> "1,234,567,890円"

パーセンテージ

1が100%とかそういうExcelみたいな換算ではなく、純粋にパーセント表記に変える

1.to_s(:percentage)
#=> "1.000%"

小数点以下が不要な場合は :precision で指定可能

100.to_s(:percentage, precision: 0)
#=> "100%"

区切り

3桁くぎりの表現

1234567890.to_s(:delimited)
#=> "1,234,567,890"

区切り文字は指定できる。

1234567890.to_s(:delimited,delimiter: '/')
#=> "1/234/567/890"

数値丸め

デフォルトは小数点以下3桁以降は丸め

12345.67890.to_s(:rounded)
#=> "12345.679"

丸め位置は調整可能

12345.67890.to_s(:rounded, precision: 1)
#=> "12345.7"

ただしマイナス表現は不可

12345.67890.to_s(:rounded, precision: -1)
ArgumentError: negative argument

バイト表現

1234567890.to_s(:human_size)
#=> "1.15 GB"

ちゃんと1000を指定すると1000Byteになる

1000.to_s(:human_size)
#=> "1000 Bytes"

1024.to_s(:human_size)
#=> "1 KB"

1025.to_s(:human_size)
#=> "1 KB"

英語表記

thousandとか、hundredはない

1000.to_s(:human)
#=> "1 Thousand"

100.to_s(:human)
#=> "100"

参考リンク