From: ddoherty03 Date: 2009-07-23T02:00:10+09:00 Subject: Bug Rounding Floats? (9.245 * 100).round => 924? S/B 925! All, Would someone try the below unit test and explain why ruby does not pass. It came up while I was trying to write a generalized rounding method for floats that takes the number of place to round to as a parameter. It gave wrong answers, but only on rare inputs. For example, (9.245 * 100).round should be 925, but my ruby gives 924. ================================= #! /usr/bin/env ruby # require 'test/unit' class TestFloatRounding < Test::Unit::TestCase def test_round assert_equal(925, 924.5.round, "Rounding Error: 924.5.round") assert_equal(9.25, (9.245 * 10.0**2).round / 10.0**2, "Rounding Error: (9.245 * 10.0**2).round / 10.0**2") assert_equal(925, (9.245 * 10.0**2).round, "Rounding Error:(9.245 * 10.0**2).round") assert_equal(924.5, 9.245 * 10.0**2, "Rounding Error: 9.245 * 10.0**2") assert_equal(925, 924.5.round, "Rounding Error: 924.5.round") assert_equal(924.5, 9.245 * 10 * 10, "Rounding Error: 9.245 * 10 * 10") assert_equal(925, (9.245 * 10 * 10).round, "Rounding Error: (9.245 * 10 * 10).round") assert_equal(925.0, 9.245 * 10 * 10 + 0.5, "Rounding Error: 9.245 * 10 * 10 + 0.5") assert_equal(925, (9.245 * 10 * 10 + 0.5).floor, "Rounding Error: (9.245 * 10 * 10 + 0.5).floor") end end ===================================