Forum: Ruby number format

73700e119917433681f2e8f3e4369f74?d=identicon&s=25 Li CN (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
Cd3312ac93f768b1b449af457c0fca06?d=identicon&s=25 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
C515daf003a781a638d8a01e41a935a0?d=identicon&s=25 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"
73700e119917433681f2e8f3e4369f74?d=identicon&s=25 Li CN (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
Ae36591847393e58ff189704f5eb18f2?d=identicon&s=25 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
4db5dbdedcae4df2feca2f2d93330208?d=identicon&s=25 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

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.