
Ask HN: Why Ruby doesn’t know how to do maths? - ajimix
I&#x27;m not an expert in maths but the following operation gives a different result in ruby than in any other language or calculator I&#x27;ve tried:<p>Ruby:
(289 &#x2F; 30 * 30) - (149 &#x2F; 30 * 30)<p>150<p>Rest of the world:
(289 &#x2F; 30 * 30) - (149 &#x2F; 30 * 30)<p>140<p>An explanation is greatly appreciated
======
ThrowawayR2
289/30 is exactly 9 and 149/30 is exactly 4 because they are integer
expressions. You need to specify the constants as floating point values if you
want floating point behavior.

Ruby does know how to do math and is doing precisely what you told it to.

~~~
ajimix
thanks for the clear explanation. It's strange to me as a newbie in ruby that
this can happen and I think that can lead to errors if you don't take that
into account when doing calculations with numbers... Good to know

~~~
Dajve_Bloke
NB - you get the same result in MS-SQL (and for exactly the same reason).

Ruby behaves like SQL in that appending a decimal to the values results in
non-integer maths being employed.

MS-SQL itself is slightly out (I assume due to floating point inaccuracy)

SELECT (289.0 / 30.0 * 30.0) - (149.0 / 30.0 * 30.0) 140.0000100

------
Dajve_Bloke
289/30 = 9 as it's truncating the non-integer part of the operation. So the
calculation evaluates to 270 - 120 = 150

------
mtmail
It defaults to integer arithmetic. 5/3 will return 1. 5.to_f/3 will return
1.6666666666666667

------
oregontechninja
This is a stack overflow question buddy

