Project

General

Profile

Actions

Feature #4786

closed

RCR new Feature: Numeric#grouped

Added by rogerdpack (Roger Pack) almost 13 years ago. Updated over 11 years ago.

Status:
Rejected
Target version:
-
[ruby-core:36494]

Description

Hello all.

As discussed in http://www.ruby-forum.com/topic/1060694#new with apparently no objection, this is a request for an easy way to get comma separated string values from numeric types.

Background:
Currently in ruby you can enter large numbers with digit grouping:
a = 1_000_000_000

however there is no convenient way to convert from a number back to digit grouping

Suggestion:

1_000_000_000.grouped
=> "1,000,000,000"

class Numeric
def separate(sep=",")
self.to_s.reverse.scan(/(?:\d*.)?\d{1,3}-?/).join(sep).reverse
end
end

Another option would be to support this extended printf syntax:

"%'d" % 12345678
=> 12,345,678

Though I'd lean toward the former.

Feedback?
Thanks.
-roger-

Updated by nobu (Nobuyoshi Nakada) almost 13 years ago

Hi,

At Fri, 27 May 2011 07:22:37 +0900,
Roger Pack wrote in [ruby-core:36494]:

Background:
Currently in ruby you can enter large numbers with digit grouping:
a = 1_000_000_000

however there is no convenient way to convert from a number back to digit grouping

Suggestion:

1_000_000_000.grouped
=> "1,000,000,000"

If you use round-tripping as the base, the separater should be
"_" by default.

class Numeric
def separate(sep=",")
self.e
end
end

It makes 12323.separate("xy") "12yx323", which does not seem
nice.

And not all locales use 3-digits separation.

def separate(n, sep="_")
to_s.gsub(/\G(?<!\d)(?<=\d{#{n}})(?=\d)|(?<=\d)(?=\d{#{n}}+\b)/, sep)
end

--
Nobu Nakada

Updated by shyouhei (Shyouhei Urabe) almost 13 years ago

-1.

As nobu said numbering system depends on locales. So far ruby has been strictly avoiding locale-dependent features. It is too careless to introduce such feature.

Updated by shyouhei (Shyouhei Urabe) almost 13 years ago

P.S. POSIX does specify printf("%'d"), but this does not define how the numbers are grouped, because of course, by theory they cannot.

Updated by nobu (Nobuyoshi Nakada) almost 13 years ago

Hi,

At Fri, 27 May 2011 08:17:52 +0900,
Nobuyoshi Nakada wrote in [ruby-core:36495]:

And not all locales use 3-digits separation.

According to
http://en.wikipedia.org/wiki/Indian_numbering_system, it's
more complicated than I've thought.

Therefore I'm against it now.

--
Nobu Nakada

Updated by naruse (Yui NARUSE) almost 13 years ago

Ruby doesn't include Locale depended features on current policy.
So it should be done by ICU or ActiveSupport or something.

Updated by mame (Yusuke Endoh) about 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to mame (Yusuke Endoh)

Updated by duerst (Martin Dürst) about 12 years ago

  • Status changed from Assigned to Rejected

naruse (Yui NARUSE) wrote:

Ruby doesn't include Locale depended features on current policy.
So it should be done by ICU or ActiveSupport or something.

We have looked at this issue today at our Ruby developer meeting in Akihabara, and we agree with Yui. We have therefore rejected this issue.

Updated by Anonymous over 11 years ago

On 5/26/11, Shyouhei Urabe wrote:

Issue #4786 has been updated by Shyouhei Urabe.

-1.

As nobu said numbering system depends on locales. So far ruby has been
strictly avoiding locale-dependent features. It is too careless to
introduce such feature.

I'd be down with some local independent implementation, like java's
new DecimalFormat( "#,###,###,##0.00" );
basically.
Cheers!
roger

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0