Доверительные интегральные значения FP
Чтобы правильно обрабатывать все возможные типы ключей, если вы собираетесь преобразовать его, я бы предложил что-то вроде:
h = {:a => 54.0, :b => 572.0, :c => 1045.0, :d => 'test', :e => 1.23 }
p(h.merge(h) do |k, v|
v = v.to_i if v.is_a?(Float) && v.to_i == v
v
end)
Приведенный выше код преобразует значения с плавающей точкой в хеш, которые фактически являются целыми числами.
Но на самом деле вам вообще не нужно этого делать. Несмотря на то, что обычно не доверяют форматам с плавающей запятой, оказывается, что они точно представляют целые значения.
Вы можете верить, что любое значение, которое было целым числом в базе данных, будет точно совпадать с целочисленными константами (включая 0), и что вы не увидите любые артефакты округления.
Вы заметите, конечно, разницу, если вы поделите поплавок на что-то, кроме фактора.