質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

7642閲覧

数字の桁数で条件分岐

terate

総合スコア103

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

1クリップ

投稿2016/04/14 01:59

数字の桁数で条件分岐をしたいです。

もし、変数aが二桁だったら〜〜〜、一桁だったら〜〜〜といった具合に分けたいのですが、if文などでどのように書いたら良いでしょうか?

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

2つの方法を書いてみました。

  1. log10()をつかって数字の桁数を求める
  2. 数字を文字列に変換して、文字列長さを求める

a.rb

ruby

1TESTS = [ 2 [0, 1], 3 [1, 1], 4 [9, 1], 5 [10, 2], 6 [99, 2], 7 [1234, 4], 8 [12345678901234567890, 20], 9 [-1, 1], 10 [-10, 2], 11 # [1.234, 1] # 小数は切捨ててから計算する? 12] 13 14def keta_01(num) 15 return 1 if num == 0 16 num *= -1 if num < 0 17 Math.log10(num).floor + 1 18end 19 20def keta_02(num) 21 num *= -1 if num < 0 22 "#{num}".length 23end 24 25TESTS.each do |test| 26 p "keta_01(#{test[0]}) -> #{keta_01(test[0])}" 27 # fail "keta_01(#{test[0]}) -> #{keta_01(test[0])}" if keta_01(test[0]) != test[1] 28end 29 30puts 31TESTS.each do |test| 32 p "keta_02(#{test[0]}) -> #{keta_02(test[0])}" 33 # fail "keta_02(#{test[0]}) -> #{keta_02(test[0])}" if keta_02(test[0]) != test[1] 34end

実行結果

$ ruby a.rb "keta_01(0) -> 1" "keta_01(1) -> 1" "keta_01(9) -> 1" "keta_01(10) -> 2" "keta_01(99) -> 2" "keta_01(1234) -> 4" "keta_01(12345678901234567890) -> 20" "keta_01(-1) -> 1" "keta_01(-10) -> 2" "keta_02(0) -> 1" "keta_02(1) -> 1" "keta_02(9) -> 1" "keta_02(10) -> 2" "keta_02(99) -> 2" "keta_02(1234) -> 4" "keta_02(12345678901234567890) -> 20" "keta_02(-1) -> 1" "keta_02(-10) -> 2"

投稿2016/04/14 21:46

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzukis

2016/04/15 02:12

- 数値のゼロ判定には`==0`の替わりに`#zero?`というメソッドも使えます。 - 符号判定して負数の場合-1を掛ける、という操作の代わりに、`#abs`メソッドが使えます。 - 切り捨て(`#floor`)して+1する代わりに、切り上げ(`#ceil`メソッド)が使えます。 -数値の文字列化は`"#{num}"`より`num.to_s`のほうがよいです。
guest

0

桁数は「.length」を使えば取得できますので、こんな感じでいかがでしょう?

ruby

1a = "a" 2if a.length == 1 3 puts "hoge" 4elsif a.length == 2 5 puts "hogehoge" 6else 7 puts a.length 8end

投稿2016/04/14 02:06

編集2016/04/14 02:07
ShoheiUyama

総合スコア206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

桁というか
10以上の場合、100以上の場合と書いていけばいいかと思います。

投稿2016/04/14 02:04

torisan

総合スコア678

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問