Do you think,  would it be worth to add casting to float ?
`intersection_area.to_f`

when the numbers are integers :
`50/51*100` returns `0`