Convert bignum to numeric and formatting

Hi you all,

I’m trying to format a Bignum such as 1012345556 into 1.012.345.556
(separating the thousands).
I’ve seen the extension of Numeric [1] can do that but, how can I
convert my Bignum to a Numeric?

Thanks.

[1] http://extensions.rubyforge.org/rdoc/classes/Numeric.html

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:

Hi you all,

I’m trying to format a Bignum such as 1012345556 into 1.012.345.556
(separating the thousands).
I’ve seen the extension of Numeric [1] can do that but, how can I
convert my Bignum to a Numeric?

Thanks.

[1] http://extensions.rubyforge.org/rdoc/classes/Numeric.html

You don’t need to convert a Bignum into a Numeric because it already is:
Bignum is a subclass of Integer, which is a Subclass of Numeric.

Stefano

Hi,

You don’t need to convert a Bignum into a Numeric because it already is:
Bignum is a subclass of Integer, which is a Subclass of Numeric.

I get this:
“undefined method `format_s’ for 10067064106:Bignum”

So my question is, I’m afraid, how can I install the Numeric extension?
(I always thought the extensions come with the Ruby installation…)

Thanks.

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:

Thanks.

If you have already rubygems installed, you can install extensions
through it:

gem install -r extensions

(if you’re on unix, you’ll need to use sudo to do this).

If you don’t have rubygems installed, you can install it (look at the
rubyforge page for rubygems for how to do it) or install extensions by
hand.
To do this, go to the extensions project page on rubyforge(
http://rubyforge.org/projects/extensions/ ), follow the download link
and
download the tgz file. At this point, you need to extract the files in
the
tgz file and put them somewhere ruby will look for them (you can get a
list
of such places looking at the $: global variable from irb). Depending on
the
operating system you use, these paths may vary. For instance, on my
gentoo
system, they are:

/usr/lib/ruby/site_ruby/1.8
/usr/lib/ruby/site_ruby/1.8/i686-linux
/usr/lib/ruby/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i686-linux

The most appropriate place in this case should be
/usr/lib/ruby/site_ruby/1.8.

Another option is to put the files in any directory and add it to the
ruby
load path either via the environment variable RUBYLIB or using the -L
switch
when calling ruby or modifying the $: variable from inside your ruby
program.

I hope this helps

Stefano

Ok,

I’ve executed:
gem install -r extensions

And “extensions-0.6.0” has been installed (thanks! :)) (I’ve checked
it), but the error of
“undefined method `format_s’ for 10067064106:Bignum”
still appears.

(I’m working with Rails)

Stefano C. wrote:

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:

Thanks.

If you have already rubygems installed, you can install extensions
through it:

gem install -r extensions

(if you’re on unix, you’ll need to use sudo to do this).

If you don’t have rubygems installed, you can install it (look at the
rubyforge page for rubygems for how to do it) or install extensions by
hand.
To do this, go to the extensions project page on rubyforge(
http://rubyforge.org/projects/extensions/ ), follow the download link
and
download the tgz file. At this point, you need to extract the files in
the
tgz file and put them somewhere ruby will look for them (you can get a
list
of such places looking at the $: global variable from irb). Depending on
the
operating system you use, these paths may vary. For instance, on my
gentoo
system, they are:

/usr/lib/ruby/site_ruby/1.8
/usr/lib/ruby/site_ruby/1.8/i686-linux
/usr/lib/ruby/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i686-linux

The most appropriate place in this case should be
/usr/lib/ruby/site_ruby/1.8.

Another option is to put the files in any directory and add it to the
ruby
load path either via the environment variable RUBYLIB or using the -L
switch
when calling ruby or modifying the $: variable from inside your ruby
program.

I hope this helps

Stefano

Ok, this works with the “require” statement (I’ve put it in
environment.rb)

Well, however, this does not work as it was expected.
I’ve made an script as this:


require ‘extensions/numeric’

n = 10067064106.format_s(:eu, :sep => ‘.’)
puts n


and the output is 0.067.064.106, without the first “1”.

Why is it deleting the first digit? Is Numeric valid just for numbers of
11 digits?

Lots of thanks.

Stefano C. wrote:

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:

(I’m working with Rails)

Stefano C. wrote:

Yes, I forgot to add that you need to use

require ‘extensions/numeric’

in the file where you use format_s

Stefano

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:

(I’m working with Rails)

Stefano C. wrote:

Yes, I forgot to add that you need to use

require ‘extensions/numeric’

in the file where you use format_s

Stefano

Damaris F. wrote:

Hi you all,

I’m trying to format a Bignum such as 1012345556 into 1.012.345.556
(separating the thousands).

Leaving aside the Numeric extension for a minute, this bit of code
solves the problem.

x = 12345678901234
t = x.to_s.reverse.gsub(/(\d){3}(?=\d)/) {|p| p + ‘.’}.reverse
puts t

I’ve seen other regexp solutions to this problem on this list, but the
above code is what I came up with on the spur of the moment.

Alle sabato 5 gennaio 2008, Damaris F. ha scritto:


and the output is 0.067.064.106, without the first “1”.

Why is it deleting the first digit? Is Numeric valid just for numbers of
11 digits?

Lots of thanks.

It’s a bug of extensions (it works correctly using another separator).
The
problem is that in extensions/numeric.rb there are calls to gsub! like:

dec.gsub!(/#{sm}$/, ‘’)

where sm is the separator. Since the dot is a special character in a
regexp,
it doesn’t work as intended. It should have been:

dec.gsub!(/#{Regexp.quote(sm)}$/, ‘’)

I attach a working copy of extensions/numeric you can use instead of the
original one (just replace the file. If you used rubygems installed, it
should be somewhere like
RUBY_INSTALL_PATH/gems/1.8/gems/extensions/lib/numeric)

I’d also report a bug at rubyforge, but I’m not sure whether the project
is
still active (there are no news past 2004, no messages in the forums and
no
bugs). Does anyone know more about this

Stefano

Hi again,

looking the Rails book I’ve seen there are built-in helper methods in
Rails.
One of them is number_with_delimiter, which set the delimiter you
specify in the thousand-group of digits in the number :S

Yes! This works great!
I’ve also seen the regexp solutions on the forum, but they were rather
complex and that was the reason to use the Numeric extension and avoid
them, but this one of yours is simple enough.

Thanks a lot again! :smiley: