Exponenciation in Ruby <> Javascript and Ruby to_i in Javascript and prevent rounding float/decimals
Let’s begin with an actual example and conversion for both languages(Ruby and JavaScript).
Most of the time, if you want to take n number of decimals after the .
from a big decimal or just fill it with zeros, you would do something like this:
Ruby
number = 4.9999999
# eg: with a precision of 6
'%.6f' % number # => "5.000000"
sprintf('%.6f', number) # => "5.000000"
format('%.6f', number) # => "5.000000"
Javascript
number = 4.9999999
number.toFixed(6) => '5.000000'
How to solve that problem?
By using a custom method!
Ruby
def truncate_float(number, precision)
factor = 10 ** precision
(factor * number).to_i / factor.to_f
end
result = truncate_float(4.9, 6)# => 4.9
# then
'%.6f' % result # => "4.900000"
truncated_value = truncate_float(4.9999999, 6) # => 4.999999
'%.6f' % truncated_value # => "4.999999"
Now in JavaScript
function truncateDecimal(decimalNumber, precision) {
factor = Math.pow(10, precision)
return Math.floor(factor * decimalNumber) / factor
}
truncateDecimal(4.9, 6) // 4.9
truncateDecimal(4.9999999999, 6) // 4.999999
There you have it!