18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/nepali_number/humanizer.rb', line 18
def human(number, precision: 2, strip_insignificant_zeros: true, units: UNITS)
raise ArgumentError, "number is required" if number.nil?
value = BigDecimal(number.to_s)
sign = value.negative? ? "-" : ""
absolute = value.abs
unit_value, unit_name = units.find { |candidate_value, _| absolute >= candidate_value }
return "#{sign}#{integer_string(absolute)}" unless unit_value
scaled = absolute / unit_value
scaled_text =
if scaled.frac.zero?
integer_string(scaled)
else
decimal_string(scaled, precision, strip_insignificant_zeros)
end
"#{sign}#{scaled_text} #{unit_name}"
end
|