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-forum.com/ .
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
···
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
I am getting the truncate but the round off mentioned above doesn't work
···
--
Posted via http://www.ruby-forum.com/ .
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.
···
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
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-forum.com/ .
BIl_Kleb1
(BIl Kleb)
20 November 2007 20:40
6
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.com/24825g
Regards,
···
--
Bil Kleb
http://fun3d.larc.nasa.gov
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-forum.com/ .