[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

number format

Li Chen

12/4/2006 1:49:00 AM

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

5 Answers

Daniel Finnie

12/4/2006 2:27:00 AM

0

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
>

George

12/4/2006 2:37:00 AM

0

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

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"

Li Chen

12/4/2006 2:57:00 AM

0


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

Jeremy Hinegardner

12/4/2006 3:01:00 AM

0


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

--
========================================================================
Jeremy Hinegardner jeremy@hinegardner.org


Paul Lutus

12/4/2006 7:56:00 AM

0

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