From: nobu.nokada@... Date: 2004-04-22T10:04:06+09:00 Subject: Re: 5.000...007.to_s => "5" Hi, At Thu, 22 Apr 2004 04:36:05 +0900, Jeff Mitchell wrote in [ruby-talk:97924]: > This fixes 1.000..7 but does not fix two other cases I didn't mention, > > arda:~/cur/ruby> ./ruby -e 'puts 1.00000000000004.to_s' > 1.00000000000004 > arda:~/cur/ruby> ./ruby -e 'puts 1.000000000000004.to_s' > 1 > arda:~/cur/ruby> ./ruby -e 'puts 1.0000000000000004.to_s' > 1.0 > arda:~/cur/ruby> ./ruby -e 'puts 1.99999999999999.to_s' > 1.99999999999999 > arda:~/cur/ruby> ./ruby -e 'puts 1.999999999999999.to_s' > 2 > arda:~/cur/ruby> ./ruby -e 'puts 1.9999999999999999.to_s' > 2.0 Hmmm..., I didn't consider about upper boundary. Index: numeric.c =================================================================== RCS file: /cvs/ruby/src/ruby/numeric.c,v retrieving revision 1.106 diff -u -2 -p -r1.106 numeric.c --- numeric.c 14 Apr 2004 04:06:25 -0000 1.106 +++ numeric.c 22 Apr 2004 01:00:45 -0000 @@ -517,5 +517,5 @@ flo_to_s(flt) else fmt = "%.16e"; } - else if ((d1 = modf(value, &d2)) == 0) { + else if ((d1 = modf(avalue, &d2)) <= 5.0e-15 || (1.0 - d1) <= 5.0e-15) { fmt = "%.1f"; } -- Nobu Nakada