Number format

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 via http://www.ruby-forum.com/.

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 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.

Thanks,

Li

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 12/4/06, Li Chen <chen_li3@yahoo.com> 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.

Thanks,

Li

--
Posted via http://www.ruby-forum.com/\.

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 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.

--

Jeremy Hinegardner jeremy@hinegardner.org

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

···

____________________________________________________________________________________
Have a burning question?
Go to www.Answers.yahoo.com and get answers from real people who know.

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.

···

--
Paul Lutus
http://www.arachnoid.com