fractional_rule_for

in lib/twitter_cldr/formatters/numbers/rbnf/rule_set.rb [70:137]


        def fractional_rule_for(number)
          
          
          
          

          
          
          
          
          index = search_start_index
          index += 1 while rules[index].base_value == 0
          least_common_multiple = rules[index].base_value

          (index + 1).upto(rules.size - 1) do |i|
            least_common_multiple = lcm(least_common_multiple, rules[i].base_value)
          end

          numerator = (number * least_common_multiple).round

          
          difference = 10 ** 30  
          winner = 0

          index.upto(rules.size - 1) do |i|
            
            
            
            
            
            
            temp_difference = numerator * BigDecimal(rules[i].base_value) % least_common_multiple

            
            
            
            if (least_common_multiple - temp_difference) < temp_difference
              temp_difference = least_common_multiple - temp_difference
            end

            
            
            
            
            if temp_difference < difference
              difference = temp_difference
              winner = i

              break if difference == 0
            end
          end

          
          
          
          
          
          
          if (winner + 1) < rules.length && rules[winner + 1].base_value == rules[winner].base_value
            if (number * rules[winner].base_value).round < 1 || (number * rules[winner].base_value).round >= 2
              winner += 1
            end
          end

          
          rules[winner]
        end