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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

3回答

1851閲覧

配列内の数値の漢数字部分を数字に置き換えたいので教えてください。

norun07

総合スコア8

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/02/03 08:50

編集2020/02/03 09:26

sum = ["98.3万", "238万", "98.3万", "795万"]
万の単位に注目してその後ろに10000を掛けたいです。

千や百も変換したいです。
できればそれを降順(数字の大きい順に)並べ替えたいです。

質問が大変端的で短いですがよろしくお願い致します。

調べたQiitaの記事です。
https://qiita.com/alfa/items/24611f664949709f530d
下記のようなメソッドを用意されていました。

ruby

1def convert_kansuji(text) 2 text.tr('〇一二三四五六七八九', '0123456789') 3 .gsub(/(\d+)?十(\d+)?/) { ($1 || 1).to_i * 10 + $2.to_i } 4 .gsub(/(\d+)?百(\d+)?/) { ($1 || 1).to_i * 100 + $2.to_i } 5 .gsub(/(\d+)?千(\d+)?/) { ($1 || 1).to_i * 1000 + $2.to_i } 6 .gsub(/(\d+)万(\d+)?/) { $1.to_i * 10000 + $2.to_i } 7 .gsub(/(\d+)億(\d+)?/) { $1.to_i * 100000000 + $2.to_i } 8 .gsub(/(\d+)兆(\d+)?/) { $1.to_i * 1000000000000 + $2.to_i } 9end

こちらを記述し
convert_kansuji(sum)このようにして
引数内に配列を挿入しました。
しかし、undefined method `tr' for ["98.3万", "238万", "98.3万", "795万"]:Array (NoMethodError)
このようなエラーが出ました。
この記事のtrとは一体なんなのか理解できませんでした。

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

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

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

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

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

maisumakun

2020/02/03 09:10

自分で実装を試みたものや、調べて得た情報があるなら、それも記載してください。
norun07

2020/02/03 09:18

申し訳ございません。 ただいま追記致しました。 お力添えよろしくお願い致します。
shinoharat

2020/02/03 09:23

> 万の単位に注目してその後ろに1000を掛けたいです。 タイプミスだとは思うのですが、掛けるのは 10,000 ですよね?
norun07

2020/02/03 09:25

そうです! すみません修正致します。
guest

回答3

0

ruby

1if sub.include?("万") 2 sub.gsub(/([\d.]+)万(\d+)?/) { $1.to_f * 10000 + $2.to_f } 3end

このように記述することで小数点(98.3万など)に対応可能でした。

投稿2020/02/03 11:26

norun07

総合スコア8

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

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

0

ruby

1p sum.map {|sub| 2 3 if sub.include?("万") 4 sub.gsub(/(\d+)万(\d+)?/) { $1.to_i * 10000 + $2.to_i } 5 elsif sub.include?("千") 6 sub.gsub(/(\d+)?千(\d+)?/) { ($1 || 1).to_i * 1000 + $2.to_i } 7 else 8 sub 9 end 10 }

mapメソッドを配列にかけ万の位が要素に含まれている場合と千の位が要素に含まれいている場合を条件分岐して新しい配列を作成しました。

投稿2020/02/03 09:59

norun07

総合スコア8

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

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

norun07

2020/02/03 10:10

しかしこれでは["98.30000", "2380000", "98.30000", "7950000"]のような配列で98.3万が98.30000になってしまいました。
guest

0

ベストアンサー

この記事のtrとは一体なんなのか理解できませんでした。

知らないメソッドが出てきたら、普通は調べます。

def convert_kansuji(text)

は、仮引数名がtextであることからわかる通り、引数は文字列(String)です。
あなたは、そこに配列(Array)を渡してしまっています。それが間違いです。

投稿2020/02/03 09:28

編集2020/02/03 09:45
otn

総合スコア85901

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

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

norun07

2020/02/03 09:39

ご回答ありがとうございます。 trメソッドついて調べました もう少し考えたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問