Pat Maddox wrote: > I'm doing some math that results in floats with ~10 decimal places, > but I'd like to round them to 2 places. Is there a built in way of > doing this? Right now I'm doing format("%0.2f", the_float).to_f, > which seems to work fine but it seems like an ugly way of doing it. > > Thanks, > Pat > (the_float*100).round/100.0 is probably a bit faster... you might want to check the benchmarks, though. Floats are inefficient in ruby, and the string ops might actually be faster.... Oh what the heck, here's the benchmark, and the winner is... strings! This might be good place to use a C extension, if you really need it to be fast. ---- require 'benchmark' n = 1000000 the_float = 1.0/7 raise unless ("%0.2f" % the_float).to_f == (the_float*100).round/100.0 Benchmark.bmbm(10) do |rpt| rpt.report("float rounding") do n.times { ("%0.2f" % the_float).to_f } end rpt.report("string rounding") do n.times { (the_float*100).round/100.0 } end end __END__ Output: Rehearsal --------------------------------------------------- float rounding 3.220000 0.000000 3.220000 ( 5.749314) string rounding 2.240000 0.000000 2.240000 ( 4.452959) ------------------------------------------ total: 5.460000sec user system total real float rounding 3.170000 0.010000 3.180000 ( 6.379592) string rounding 2.210000 0.000000 2.210000 ( 4.422063) -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407