.net column

.NET開発者のためのブログメディア

Rubyの桁数カウント方法とは?桁数を揃えよう

2020年07月14日
SE
Rubyの桁数をカウントする方法や桁数を揃える方法を知りたいです。
PM
それでは、Rubyの桁数をカウントする方法や桁数を揃える方法をご紹介していきましょう。

Rubyの桁数について

今回は、Rubyの桁数について説明します。桁数をカウントする方法および、桁数を揃える方法について紹介します。

Rubyの桁数に興味のある方は是非ご覧ください。

桁数のカウント(文字列に変換)

Rubyでの桁数カウント方法の1つとして、数字を文字列に変換して、文字列長から桁数をカウントできます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

マイナスの数字にも対応できるように、abs関数で絶対値にします。その後、to_s関数で文字列に変換し、length関数で文字列長を求めて桁数としています。

length関数ではなく、size関数でも桁数カウントできます。

実行結果が同じになることが分かります。

このように、数字を文字列に変換して、文字列長から桁数をカウントできます。小数について、整数部の桁数をカウントしたい場合は、to_i関数でintに変換してから変換すればよいです。

桁数のカウント(計算する)

Rubyでは、文字列に変換するのではなく、桁数を計算でカウントできます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

log10は常用対数で、numは10の何条になるのかを計算します。例えば、10は10の1乗なので、log10(10)=1.0になります。それに1を加えて、2(桁)となります。

また、to_iもポイントです。例えば、5の桁数は1です。

log10(5)の結果をintに変換することで0になり、1を加算して1桁となるわけです。

常用対数ではなく、10で何回割ることができるかで桁数をカウントすることもできます。実際のソースコードを見てみましょう。

実行結果は以下のようになります。

桁数カウントの使い分け

Rubyの桁数カウント方法について、以下の2つを紹介しました。
・文字列に変換してカウント
・計算してカウント

これらは桁数の多さで使い分けるとよいでしょう。桁数が多い数字を扱う場合、文字列に変換してカウントする方が早いです。

一方、桁数がそれほど多くない数字の場合、計算してカウントする方が早いです。実際に計算してみると、違いが分かります。

桁数の指定(round/ceil/floor)

Rubyで小数点以下の桁数をそろえたい場合、round/ceil/floorなどの関数を使用します。

小数点以下N桁で四捨五入したい場合、round関数を使用します。例えば、小数点以下2桁までを表示させたい場合、round(2)と記述します。

実行結果は以下のようになります。

round(2)で小数点以下4桁目が四捨五入されていることが分かります。

小数点以下N桁で切り上げたい場合、ceil関数を使用します。

実行結果は以下のようになります。

小数点以下N桁で切り捨てたい場合、floor関数を使用します。

実行結果は以下のようになります。

このように、小数点以下の桁数をそろえたい場合、round/ceil/floorなどの関数を使用します。

桁数の指定(sprintf)

Rubyのsprintfは、与えられた引数を指定フォーマットの文字列として返却します。整数部・小数点以下ともに、桁数を指定できます。

10桁に揃えるサンプルとして、実際のソースコードを見てみましょう。右詰めしたり、左詰めしたり、0埋めしたりなど、様々な表記方法があります。

実行結果は以下のようになります。

10桁で揃えられた様々な出力ができることが分かります。

桁数の指定(String#%)

sprintfと同じフォーマットで、RubyではString#%でも桁数を揃えることができます。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

10桁で揃えられた様々な出力ができることが分かります。結果もsprintfと同じになります。

SE
Rubyの桁数を数えるだけでも様々な方法があるのですね。
PM
解説を参考にして、ご自身でRubyのソースコードを書いて理解を深めていきましょう。

Rubyのソースコードを書いてみよう

Rubyの桁数カウント方法、桁数を揃える方法について紹介しました。カウントだけでも、文字列の長さでカウントしたり、計算してカウントしたり、様々な方法があります。

これらは、用途に応じて使い分ける必要があります。ぜひご自身でRubyのソースコードを書いて、理解を深めてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)