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