class ICU::NumberFormatting::NumberFormatter
Public Class Methods
new(locale, type = :decimal)
click to toggle source
# File lib/ffi-icu/number_formatting.rb, line 56 def initialize(locale, type = :decimal) @f = make_formatter(type, locale) end
Public Instance Methods
format(number)
click to toggle source
# File lib/ffi-icu/number_formatting.rb, line 60 def format(number) needed_length = 0 out_ptr = UCharPointer.new(needed_length) retried = false begin Lib.check_error do |error| case number when Float needed_length = Lib.unum_format_double(@f, number, out_ptr, needed_length, nil, error) when Fixnum needed_length = Lib.unum_format_int32(@f, number, out_ptr, needed_length, nil, error) when BigDecimal string_version = number.to_s('F') if Lib.respond_to? :unum_format_decimal needed_length = Lib.unum_format_decimal(@f, string_version, string_version.bytesize, out_ptr, needed_length, nil, error) else needed_length = Lib.unum_format_double(@f, number.to_f, out_ptr, needed_length, nil, error) end when Bignum needed_length = Lib.unum_format_int64(@f, number, out_ptr, needed_length, nil, error) end end out_ptr.string needed_length rescue BufferOverflowError raise BufferOverflowError, "needed: #{needed_length}" if retried out_ptr = out_ptr.resized_to needed_length retried = true retry end end