Module: Baht
- Defined in:
- lib/baht.rb,
lib/baht/version.rb
Defined Under Namespace
Classes: Error
Constant Summary collapse
- VERSION =
"0.1.1"
Class Method Summary collapse
-
.get_digits(number, base: 10) ⇒ Object
Ruby < 2.4 shims for Integer#digits.
- .words(input) ⇒ Object
Class Method Details
.get_digits(number, base: 10) ⇒ Object
Ruby < 2.4 shims for Integer#digits
8 9 10 11 |
# File 'lib/baht.rb', line 8 def get_digits(number, base: 10) quotient, remainder = number.divmod(base) quotient == 0 ? [remainder] : [*get_digits(quotient, base: base), remainder] end |
.words(input) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/baht.rb', line 13 def words(input) out = "" input = input.to_f.round(2) baht = input.truncate if input == 0 return 'ศูนย์บาทถ้วน' end if input < 0 out << "ลบ" baht = -baht input = -input end baht_million_groups = get_digits(baht, base:1000000) sub_hundred = %w{ ศูนย์ หนึ่ง สอง สาม สี่ ห้า หก เจ็ด แปด เก้า สิบ สิบเอ็ด สิบสอง สิบสาม สิบสี่ สิบห้า สิบหก สิบเจ็ด สิบแปด สิบเก้า ยี่สิบ ยี่สิบเอ็ด ยี่สิบสอง ยี่สิบสาม ยี่สิบสี่ ยี่สิบห้า ยี่สิบหก ยี่สิบเจ็ด ยี่สิบแปด ยี่สิบเก้า สามสิบ สามสิบเอ็ด สามสิบสอง สามสิบสาม สามสิบสี่ สามสิบห้า สามสิบหก สามสิบเจ็ด สามสิบแปด สามสิบเก้า สี่สิบ สี่สิบเอ็ด สี่สิบสอง สี่สิบสาม สี่สิบสี่ สี่สิบห้า สี่สิบหก สี่สิบเจ็ด สี่สิบแปด สี่สิบเก้า ห้าสิบ ห้าสิบเอ็ด ห้าสิบสอง ห้าสิบสาม ห้าสิบสี่ ห้าสิบห้า ห้าสิบหก ห้าสิบเจ็ด ห้าสิบแปด ห้าสิบเก้า หกสิบ หกสิบเอ็ด หกสิบสอง หกสิบสาม หกสิบสี่ หกสิบห้า หกสิบหก หกสิบเจ็ด หกสิบแปด หกสิบเก้า เจ็ดสิบ เจ็ดสิบเอ็ด เจ็ดสิบสอง เจ็ดสิบสาม เจ็ดสิบสี่ เจ็ดสิบห้า เจ็ดสิบหก เจ็ดสิบเจ็ด เจ็ดสิบแปด เจ็ดสิบเก้า แปดสิบ แปดสิบเอ็ด แปดสิบสอง แปดสิบสาม แปดสิบสี่ แปดสิบห้า แปดสิบหก แปดสิบเจ็ด แปดสิบแปด แปดสิบเก้า เก้าสิบ เก้าสิบเอ็ด เก้าสิบสอง เก้าสิบสาม เก้าสิบสี่ เก้าสิบห้า เก้าสิบหก เก้าสิบเจ็ด เก้าสิบแปด เก้าสิบเก้า } sub_ten = sub_hundred.first 10 if (input < 100) out << sub_hundred[input] else sub_hundred[0] = "" digits = %w{ แสน หมื่น พัน ร้อย สิบ } blocks = [] baht_million_groups.each_with_index do |number, group_index| digit_words = "" hundreds = number / 100 hundreds_digits = get_digits(hundreds) len = hundreds_digits.length hundreds_digits.each_with_index do |num, index| if num > 0 digit_words << sub_ten[num] digit_words << digits[(4 - len + index)] end end unless group_index == 0 && baht_million_groups.length > 1 && hundreds == 0 sub_hundred[1] = "เอ็ด" end digit_words << sub_hundred[number % 100] blocks << digit_words end out << blocks.join('ล้าน') end out << "บาท" satangs = ('%.2f' % input)[-2..-1].to_i if satangs == 0 out << "ถ้วน" else sub_hundred[1] = "หนึ่ง" out << sub_hundred[satangs] out << "สตางค์" end out.sub(/ศูนย์บาท/, "") end |