答えて
module SIValue
# http://en.wikipedia.org/wiki/SI_prefix
PREFIX_MAGNITUDES = {
'Y' => 24, 'Z' => 21, 'E' => 18, 'P' => 15, 'T' => 12,
'G' => 9, 'M' => 6, 'k' => 3, 'h' => 2, 'da' => 1,
'd' => -1, 'c' => -2, 'm' => -3, 'μ' => -6, 'n' => -9,
'p' => -12, 'f' => -15, 'a' => -18, 'z' => -21, 'y' => -24
}
def self.from(str)
_, num, prefix = str.match(/^([-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?)(#{PREFIX_MAGNITUDES.keys.join('|')})?/o).to_a
if num
prefix ? num.to_f * 10**PREFIX_MAGNITUDES[prefix] : num.to_f
else
0.0
end
end
end
%w[ 1k +3.3m +3.3M 123.123da 0.31h 0.31μ cats ].each do |s|
p [s,SIValue.from(s) ]
end
#=> ["1k", 1000.0]
#=> ["+3.3m", 0.0033]
#=> ["+3.3M", 3300000.0]
#=> ["123.123da", 1231.23]
#=> ["0.31h", 31.0]
#=> ["0.31μ", 3.1e-07]
#=> ["cats", 0.0]
変換するのを避けるために、キーの記号ではなく文字列を使用していますが、かなり良いようです。 _変数を使用しないこともお勧めします。それはそのようなパーリズムです。 Perlismを避けてください。 –
Heh、ちょうど文字列を使用するように変換中です:)最初のマッチを便利に無視する方がいいですか? – Phrogz
"最初の試合を便利に無視するには良い方法がありますか?"結果をスライスしてunbeliever ...をスキップします。間違った値: '[1 ..- 1]'または '[1,2]' –
def scale s
a = s.downcase.split /(?=[a-z])/
Integer(a.first.to_f * Hash.new(1).merge('k' => 1024, 'm' => 1024 * 1024)[a[1]] + 0.5)
end
# you may want to extend the hash with more suffix types
- 1. 解析番号()
- 2. 解析番号
- 3. MATLABの日付番号が短すぎます - MATLABでシリアル番号の短縮を停止する方法
- 4. 番号をコルータナで解析する
- 5. Sublime/Node.js短縮番号を停止する
- 6. FParsecの番号の解析
- 7. LUISビルトイン番号エンティティ解析
- 8. アルゴリズム解析:ランダム番号
- 9. SIMカード上のEFADN(短縮ダイヤル番号)ファイルの目的
- 10. 番号を非捕捉グループでRegexで解析する
- 11. UNIXの番号のファイルの解析
- 12. C++ - std :: stringからの解析番号
- 13. 解析JSON名はJson.netでC#で番号で始まる - Newtonsoft
- 14. テキストファイルを解析して番号を取得する
- 15. Rubyで解析されたレスポンスを解析する
- 16. goo.gl短縮api:GETリクエストによる短縮
- 17. はRubyでテキストファイルを解析
- 18. Rails/Ruby:スタックトレースを短縮する方法はありますか?
- 19. Rubyでバイナリファイルを解析する
- 20. Rubyでデータセットを解析する
- 21. Rubyでブレッドクラムを解析する方法
- 22. 電話番号と住所を解析できません
- 23. log4j2:短縮/パッケージ名を短縮
- 24. QXmlDefaultHandlerで解析する際に行番号を取得する方法は?
- 25. RubyでのXML解析
- 26. JavaScriptで番号を解析する際にNaNを受け取る理由
- 27. Rubyの解析日
- 28. RubyのXML解析
- 29. Rubyで解析する機械化
- 30. Ruby on rail書式番号
あなたはこれを行うためのlibを見つけることができない場合 - あなたはおそらくされます - どのように多くの略語がありますか? 20未満の場合は、数分でコード化することができます。 –
'k'は' 1000'か '1024'を表すべきですか?前者の場合、 '1024 'に' ki'をサポートする必要がありますか? – Phrogz