From: Joel VanderWerf Date: 2006-03-22T16:10:48+09:00 Subject: Re: Round floats to N decimal places? Joel VanderWerf wrote: > Oh what the heck, here's the benchmark, and the winner is... strings! Oops. I got the benchmark labels backwards. Strings are slower. Here's the correct code and output: 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 { (the_float*100).round/100.0 } end rpt.report("string rounding") do n.times { ("%0.2f" % the_float).to_f } end end __END__ Output: Rehearsal --------------------------------------------------- float rounding 2.210000 0.000000 2.210000 ( 2.884535) string rounding 3.210000 0.000000 3.210000 ( 6.516337) ------------------------------------------ total: 5.420000sec user system total real float rounding 2.190000 0.000000 2.190000 ( 4.398573) string rounding 3.170000 0.010000 3.180000 ( 6.466687) -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407