----------------------------------------
Feature #4786: RCR new Feature: Numeric#grouped
http://redmine.ruby-lang.org/issues/4786
Author: Roger Pack
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
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-
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
-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.
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
P.S. POSIX does specify printf("%'d"), but this does not define _how_ the numbers are grouped, because of course, by theory they cannot.
Ruby doesn't include Locale depended features on current policy.
So it should be done by ICU or ActiveSupport or something.
Status changed from Open to Assigned
Assignee set to mame (Yusuke Endoh)
----------------------------------------
Feature #4786: RCR new Feature: Numeric#grouped
https://bugs.ruby-lang.org/issues/4786#change-25127
Author: rogerdpack (Roger Pack)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category:
Target version:
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-
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.
----------------------------------------
Feature #4786: RCR new Feature: Numeric#grouped
https://bugs.ruby-lang.org/issues/4786#change-25129
Author: rogerdpack (Roger Pack)
Status: Rejected
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category:
Target version:
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-