Hi all, I have a number, for example, 1.123456789. What is the Ruby way to change it into whatever number of floating points such as 1.12, 1.123,1.1234568 or 1.12345679. Thanks, Li
on 2006-12-04 02:48
on 2006-12-04 03:28
You can use the number.round method, but this doesn't take a number of decimal places. To round 1.234 to 1.23 use this code: x = 1.234 x = x * 100 # -> 123.4 x = x.round -> 123 x = x / 100.0 => 1.23 At least, that's the best method I can find from the Ruby docs... Dan
on 2006-12-04 03:38
On 12/4/06, Li Chen <chen_li3@yahoo.com> wrote: > -- > Posted via http://www.ruby-forum.com/. > > It might be better to leave the precision alone until you print it, in which case, you can print it with #sprintf or String#% or similar: irb(main):001:0> '%.2f' % 1.23456789 => "1.23" irb(main):002:0> '%.5f' % 1.23456789 => "1.23457"
on 2006-12-04 03:58
> It might be better to leave the precision alone > until you print it, in > which case, you can print it with #sprintf or > String#% or similar: > > irb(main):001:0> '%.2f' % 1.23456789 > => "1.23" > irb(main):002:0> '%.5f' % 1.23456789 > => "1.23457" I think I prefer the suggestion. Li
on 2006-12-04 04:02
On Mon, Dec 04, 2006 at 10:48:41AM +0900, Li Chen wrote: > Hi all, > > I have a number, for example, 1.123456789. What is the Ruby way to > change it into whatever number of floating points such as 1.12, > 1.123,1.1234568 or 1.12345679. You could use facets: % sudo gem install facets % irb irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'facet/float/round_at' => true irb(main):003:0> require 'facet/float/round_to' => true irb(main):004:0> x = 1.123456789 => 1.123456789 irb(main):005:0> x.round_at(3) => 1.123 irb(main):006:0> x.round_at(7) => 1.1234568 irb(main):007:0> x.round_at(100) => 1.123456789 irb(main):008:0> x.round_to(0.001) => 1.123 irb(main):009:0> x.round_to(0.000001) => 1.123457 enjoy, -jeremy
on 2006-12-04 09:00
Daniel Finnie wrote: > You can use the number.round method, but this doesn't take a number of > decimal places. > > To round 1.234 to 1.23 use this code: > x = 1.234 > x = x * 100 # -> 123.4 > x = x.round -> 123 > x = x / 100.0 => 1.23 > > At least, that's the best method I can find from the Ruby docs... This is not a good idea. Because the number being manipulated is binary but the display is decimal, the multiplication and division steps will fail on some numbers -- many, in fact -- and those numbers will print more decimal places than was intended. It's better to retain the full binary resolution of a number internally, and only show certain decimal places while printing a number -- don't try to truncate the number itself.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.