Forum: Ruby number format

Posted by Li Chen (alex-osu3)
on 2006-12-04 02:48
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
Posted by Daniel Finnie (Guest)
on 2006-12-04 03:28
(Received via mailing list)
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
Posted by George Ogata (Guest)
on 2006-12-04 03:38
(Received via mailing list)
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"
Posted by Li Chen (alex-osu3)
on 2006-12-04 03:58
(Received via mailing list)
> 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
Posted by Jeremy Hinegardner (Guest)
on 2006-12-04 04:02
(Received via mailing list)
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
Posted by Paul Lutus (Guest)
on 2006-12-04 09:00
(Received via mailing list)
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
No account? Register here.