Module: Numeja

Defined in:
lib/numeja.rb,
lib/numeja/number.rb,
lib/numeja/version.rb

Defined Under Namespace

Classes: Number

Constant Summary collapse

JA_大字 =
{
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '廿' => '二十',
  '' => '二十',
  '' => '三十',
  '' => '三十',
  '' => '四十',
  '' => '',
  '' => '',
  '' => '',
  '' => '',
  '' => ''
}.freeze
JA_数字 =
{
  '' => 0,
  '' => 1,
  '' => 2,
  '' => 3,
  '' => 4,
  '' => 5,
  '' => 6,
  '' => 7,
  '' => 8,
  '' => 9
}.freeze
JA_下数 =
{
  '' => 10 ** 1,
  '' => 10 ** 2,
  '' => 10 ** 3
}.freeze
JA_上数 =
{
  '' => 10 ** 4,
  '' => 10 ** 8,
  '' => 10 ** 12,
  '' => 10 ** 16,
  #  '垓': 10 ** 20,
  #  '秭': 10 ** 24,
  #  '𥝱': 10 ** 24,
  #  '穰': 10 ** 28,
  #  '溝': 10 ** 32,
  #  '澗': 10 ** 36,
  #  '正': 10 ** 40,
  #  '載': 10 ** 44,
  #  '極': 10 ** 48,
  #  '恒河沙': 10 ** 52,
  #  '阿僧祇': 10 ** 56,
  #  '那由他': 10 ** 60,
  #  '不可思議': 10 ** 64,
  #  '無量大数': 10 ** 68
}.freeze
JA_小数 =
{
  '' => 10 ** -1,
  '' => 10 ** -2,
  '' => 10 ** -3,
  '' => 10 ** -4,
  '' => 10 ** -5,
  '' => 10 ** -6,
  '' => 10 ** -7,
  '' => 10 ** -8,
  '' => 10 ** -9,
  '' => 10 ** -10
}.freeze
JA_割合用小数 =
{
  '' => 10 ** -1,
  '' => 10 ** -2,
  '' => 10 ** -3,
  '' => 10 ** -4,
  '' => 10 ** -5,
  '' => 10 ** -6,
  '' => 10 ** -7,
  '' => 10 ** -8,
  '' => 10 ** -9,
  '' => 10 ** -10
}.freeze
REGEXP_旧字 =
Regexp.new(Numeja::JA_大字.keys.join('|').to_s, 'g').freeze
REGEXP_数字 =
Regexp.new(Numeja::JA_数字.keys.join('|').to_s, 'g').freeze
VERSION =
'0.1.0'.freeze

Class Method Summary collapse

Class Method Details

.numerize(str) ⇒ Integer, Float

Return a numeric of the parsed japanese numerals string

Examples:

require 'numeja'

Numeja.numerize('二千三百八十一億九千四百八十七万六千三百十一') =>  238_194_876_311
Numeja.numerize('弐阡參佰捌拾壱億九千四百八十七万六千三百十一') =>  238_194_876_311
Numeja.numerize('9876億5432万1千2百3十4') => 987_654_321_234)
Numeja.numerize('9876億5432万1千2百3十4') => 987_654_321_234
Numeja.numerize('玖阡捌陌漆拾陸億伍仟肆佰參十貳万壹千弐百卅4') => 987_654_321_234
Numeja.numerize('505') => 505
Numeja.numerize('九八七六五四三二一零') => 9_876_543_210
Numeja.numerize('九分八厘七毛六糸五忽四微三繊二沙零塵一埃') => 0.9876543201
Numeja.numerize('九割八分七厘六毛五糸四忽三微二繊零沙一塵') => 0.9876543201
Numeja.numerize('二分の一') => 0.5
Numeja.numerize('三分の一') => 0.33333333333...

Parameters:

  • input (String)

    Japanese numerals(KanSuuji)

Returns:

  • (Integer, Float)

    the parsed Japanese numerals

Since:

  • 0.0.1



128
129
130
131
132
133
134
135
# File 'lib/numeja.rb', line 128

def numerize(str)
  if str.index('分の').nil?
    Numeja::Number.new(str)
  else
    denominator, molecule = str.split('分の').map { |s| Numeja::Number.new(s) }
    molecule.to_f / denominator.to_f
  end
end