oldhomemovie
oldhomemovie

Reputation: 15129

Sprintf in Ruby

Sort of a quick question. I'm writing:

puts "%.3f %.4f %.5f" % [3.998877, 3.998877, 3.998877]

and get the following output:

3.999 3.9989 3.99888

sprintf simply rounds the numbers. How do I restrict that rounding?

Upvotes: 4

Views: 9870

Answers (4)

cldwalker
cldwalker

Reputation: 6175

>> 3.998877.to_s[/^\d+\.\d{3}/].to_f
=> 3.998
>> 3.998877.to_s[/^\d+\.\d{4}/].to_f
=> 3.9988

Upvotes: 7

DigitalRoss
DigitalRoss

Reputation: 146143

>> def truncN f, digits
>>    t = 10.0 ** digits
>>    "%.#{digits}f" % ((f * t).truncate / t)
>> end
=> nil
>> n
=> 1.11181111
>> "%.3f" % n
=> "1.112"
>> truncN n, 3
=> "1.111"

Upvotes: 2

Peter
Peter

Reputation: 132317

To get the numbers 'as is', you should store them as strings. As soon as you represent them as floats you lose information about the amount of built-in precision.

Upvotes: -2

CookieOfFortune
CookieOfFortune

Reputation: 13984

you will probably need to truncate the numbers to the accuracy that you want.

f = 3.1919183
puts (f * 1000).truncate() / 1000

Upvotes: 1

Related Questions