Sha256: 8691e6a50490e446eb2463b8e828a4a2e03bea1a5e621913840d153d83738fab
Contents?: true
Size: 1.94 KB
Versions: 2
Compression:
Stored size: 1.94 KB
Contents
# frozen_string_literal: true module Plurimath module Formatter module Numbers class Fraction < TwitterCldr::Formatters::Numbers::Fraction attr_reader :format, :decimal, :precision, :separator, :group def initialize(token, symbols = {}) @format = token ? token.value.split('.').pop : '' @decimal = symbols[:decimal] || '.' @separator = symbols[:fraction_group].to_s @group = symbols[:fraction_group_digits] @digit_count = symbols[:digit_count] || nil @precision = @format.length end def apply(fraction, options = {}, int = "") precision = options[:precision] || self.precision return "" unless precision > 0 number = interpolate(format(options), fraction, :left) number = digit_count_format(int, fraction, number) if @digit_count formatted_number = change_format(precision, number) if number formatted_number ? decimal + formatted_number : "" end def format(options) precision = options[:precision] || self.precision precision ? '0' * precision : @format end protected def change_format(precision, string) tokens = [] tokens << string&.slice!(0, (group || string.length)) until string&.empty? tokens.compact.join(separator) end def digit_count_format(int, fraction, number) integer = int + "." + fraction float = BigDecimal(integer) int_length = integer.length - 1 @digit_count ||= int_length if int_length > @digit_count number_string = float.round(@digit_count - int.length) @digit_count > int.length ? number_string.to_s("F").split(".").last : nil elsif int_length < @digit_count number + "0" * (@digit_count - int_length) else number end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
plurimath-0.8.10 | lib/plurimath/formatter/numbers/fraction.rb |
plurimath-0.8.9 | lib/plurimath/formatter/numbers/fraction.rb |