In my code I'm doing:
Code: Select all
local function are_doubles_equal(a, b, epsilon)
epsilon = epsilon or 1e-4 -- Default epsilon value
return math.abs(a - b) < epsilon
end
Code: Select all
for recipe_name, prod_bonus in pairs(processed_recipes) do
if not are_doubles_equal(force.recipes[recipe_name].productivity_bonus, prod_bonus) then
local display_item_name = {"?", {"item-name."..recipe_name}, {"fluid-name."..recipe_name}, {"entity-name."..recipe_name}, recipe_name}
game.print({"", {"mod-message.progressive-productivity-progressed", display_item_name, (prod_bonus * 100)}})
force.recipes[recipe_name].productivity_bonus = prod_bonus
end
end
Code: Select all
538.765 Script @__progressive-productivity__/utility/product_cache.lua:87: Productivity not equal!
538.765 Script @__progressive-productivity__/utility/product_cache.lua:88: 1.039999961853
538.765 Script @__progressive-productivity__/utility/product_cache.lua:89: 1.05
Code: Select all
/c game.player.force.recipes["iron-plate"].productivity_bonus=1.05
It seems the reason is that the productivity_bonus is floored at 2 decimal places, rather than rounded to 2 decimal places (1.050001 works properly.)