[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

How to Round off and Truncate in ruby

Surjit Nameirakpam

11/20/2007 8:07:00 PM

Scenario.

I have an number x=12.45678

1. I want a function to display x as a round of upto 3 decimal place as
12.457
2. Similarly truncate x at 3 decimal place as 12.456

I am using gsl library function and searched for TRUNC and ROUND
function but couldn't find anything concrete
--
Posted via http://www.ruby-....

6 Answers

Phrogz

11/20/2007 8:19:00 PM

0

On Nov 20, 1:07 pm, Surjit Nameirakpam <surjit.mei...@gmail.com>
wrote:
> Scenario.
>
> I have an number x=12.45678
>
> 1. I want a function to display x as a round of upto 3 decimal place as
> 12.457
> 2. Similarly truncate x at 3 decimal place as 12.456
irb(main):001:0> x=12.45678
=> 12.45678
irb(main):002:0> s = "%.3f" % x
=> "12.457"
irb(main):003:0> y = (x*1000).round / 1000
=> 12
irb(main):004:0> y = (x*1000).round / 1000.0
=> 12.457
irb(main):007:0> class Numeric
irb(main):008:1> def round_to( decimals=0 )
irb(main):010:2> factor = 10.0**decimals
irb(main):011:2> (self*factor).round / factor
irb(main):012:2> end
irb(main):013:1> end
=> nil
irb(main):014:0> y = x.round_to(3)
=> 12.457
irb(main):015:0> y = x.round_to(1)
=> 12.5
irb(main):016:0> y = x.round_to(-1)
=> 10.0

Note that 'rounding' the number is subject to floating point precision
errors. Subsequent printing of a number rounded to 3 decimal places
like the above may display as something like 12.4569999999999999999

Surjit Nameirakpam

11/20/2007 8:31:00 PM

0

I am getting the truncate but the round off mentioned above doesn't work
--
Posted via http://www.ruby-....

Phrogz

11/20/2007 8:34:00 PM

0

On Nov 20, 1:31 pm, Surjit Nameirakpam <surjit.mei...@gmail.com>
wrote:
> I am getting the truncate but the round off mentioned above doesn't work

As shown above, it certainly does work. (You are looking at the actual
output of typing code directly into irb and having Ruby evaluate it.)

I assume your code is slightly different. Perhaps if pared it down to
a test case that showed exactly your problem, we could help further.

Surjit Nameirakpam

11/20/2007 8:35:00 PM

0

Surjit Nameirakpam wrote:
> I am getting the truncate but the round off mentioned above doesn't work

Sorry.. Its the opposite round of works but truncate doesn't work
--
Posted via http://www.ruby-....

Bil Kleb

11/20/2007 8:38:00 PM

0

Surjit Nameirakpam wrote:
> I am getting the truncate but the round off mentioned above doesn't work

Please share your test, e.g., http://tinyurl....

Regards,
--
Bil Kleb
http://fun3d.lar...

Phrogz

11/20/2007 8:43:00 PM

0

Surjit Nameirakpam wrote:
> Surjit Nameirakpam wrote:
>> I am getting the truncate but the round off mentioned above doesn't work
>
> Sorry.. Its the opposite round of works but truncate doesn't work

Ah, I missed that you also wanted truncate.

irb(main):001:0> class Numeric
irb(main):002:1> # same potential floating point problem as round_to
irb(main):003:1* def truncate_to( decimals=0 )
irb(main):004:2> factor = 10.0**decimals
irb(main):005:2> (self*factor).floor / factor
irb(main):006:2> end
irb(main):007:1> end
=> nil
irb(main):008:0>
irb(main):009:0* x = 12.45678
=> 12.45678
irb(main):010:0> x.truncate_to( 3 )
=> 12.456
irb(main):011:0> x.to_s.sub /(\.\d{3}).+/, '\1'
=> "12.456"
--
Posted via http://www.ruby-....