Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
d7318599
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d7318599
编写于
2月 06, 2015
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'rm-ntp'
Merge #12067 rebasing and improving the code.
上级
01c86fbf
2d2bcde3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
40 addition
and
27 deletion
+40
-27
activesupport/CHANGELOG.md
activesupport/CHANGELOG.md
+4
-0
activesupport/lib/active_support/number_helper.rb
activesupport/lib/active_support/number_helper.rb
+4
-2
activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb
...tive_support/number_helper/number_to_rounded_converter.rb
+28
-25
activesupport/test/number_helper_test.rb
activesupport/test/number_helper_test.rb
+4
-0
未找到文件。
activesupport/CHANGELOG.md
浏览文件 @
d7318599
*
Enable number_to_percentage to keep the number's precision by allowing :precision to be nil
*Jack Xu*
*
config_accessor became a private method, as with Ruby's attr_accessor.
*Akira Matsuda*
...
...
activesupport/lib/active_support/number_helper.rb
浏览文件 @
d7318599
...
...
@@ -94,7 +94,7 @@ def number_to_currency(number, options = {})
# * <tt>:locale</tt> - Sets the locale to be used for formatting
# (defaults to current locale).
# * <tt>:precision</tt> - Sets the precision of the number
# (defaults to 3).
# (defaults to 3).
Keeps the number's precision if nil.
# * <tt>:significant</tt> - If +true+, precision will be the #
# of significant_digits. If +false+, the # of fractional
# digits (defaults to +false+).
...
...
@@ -116,6 +116,7 @@ def number_to_currency(number, options = {})
# number_to_percentage(1000, delimiter: '.', separator: ',') # => 1.000,000%
# number_to_percentage(302.24398923423, precision: 5) # => 302.24399%
# number_to_percentage(1000, locale: :fr) # => 1 000,000%
# number_to_percentage:(1000, precision: nil) # => 1000%
# number_to_percentage('98a') # => 98a%
# number_to_percentage(100, format: '%n %') # => 100 %
def
number_to_percentage
(
number
,
options
=
{})
...
...
@@ -161,7 +162,7 @@ def number_to_delimited(number, options = {})
# * <tt>:locale</tt> - Sets the locale to be used for formatting
# (defaults to current locale).
# * <tt>:precision</tt> - Sets the precision of the number
# (defaults to 3).
# (defaults to 3).
Keeps the number's precision if nil.
# * <tt>:significant</tt> - If +true+, precision will be the #
# of significant_digits. If +false+, the # of fractional
# digits (defaults to +false+).
...
...
@@ -182,6 +183,7 @@ def number_to_delimited(number, options = {})
# number_to_rounded(111.2345, significant: true) # => 111
# number_to_rounded(111.2345, precision: 1, significant: true) # => 100
# number_to_rounded(13, precision: 5, significant: true) # => 13.000
# number_to_rounded(13, precision: nil) # => 13
# number_to_rounded(111.234, locale: :fr) # => 111,234
#
# number_to_rounded(13, precision: 5, significant: true, strip_insignificant_zeros: true)
...
...
activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb
浏览文件 @
d7318599
...
...
@@ -6,36 +6,39 @@ class NumberToRoundedConverter < NumberConverter # :nodoc:
def
convert
precision
=
options
.
delete
:precision
significant
=
options
.
delete
:significant
case
number
when
Float
,
String
@number
=
BigDecimal
(
number
.
to_s
)
when
Rational
@number
=
BigDecimal
(
number
,
digit_count
(
number
.
to_i
)
+
precision
)
else
@number
=
number
.
to_d
end
if
significant
&&
precision
>
0
digits
,
rounded_number
=
digits_and_rounded_number
(
precision
)
precision
-=
digits
precision
=
0
if
precision
<
0
# don't let it be negative
else
rounded_number
=
number
.
round
(
precision
)
rounded_number
=
rounded_number
.
to_i
if
precision
==
0
rounded_number
=
rounded_number
.
abs
if
rounded_number
.
zero?
# prevent showing negative zeros
end
if
precision
case
number
when
Float
,
String
@number
=
BigDecimal
(
number
.
to_s
)
when
Rational
@number
=
BigDecimal
(
number
,
digit_count
(
number
.
to_i
)
+
precision
)
else
@number
=
number
.
to_d
end
formatted_string
=
if
BigDecimal
===
rounded_number
&&
rounded_number
.
finite?
s
=
rounded_number
.
to_s
(
'F'
)
+
'0'
*
precision
a
,
b
=
s
.
split
(
'.'
,
2
)
a
+
'.'
+
b
[
0
,
precision
]
if
options
.
delete
(
:significant
)
&&
precision
>
0
digits
,
rounded_number
=
digits_and_rounded_number
(
precision
)
precision
-=
digits
precision
=
0
if
precision
<
0
# don't let it be negative
else
"%00.
#{
precision
}
f"
%
rounded_number
rounded_number
=
number
.
round
(
precision
)
rounded_number
=
rounded_number
.
to_i
if
precision
==
0
rounded_number
=
rounded_number
.
abs
if
rounded_number
.
zero?
# prevent showing negative zeros
end
formatted_string
=
if
BigDecimal
===
rounded_number
&&
rounded_number
.
finite?
s
=
rounded_number
.
to_s
(
'F'
)
+
'0'
*
precision
a
,
b
=
s
.
split
(
'.'
,
2
)
a
+
'.'
+
b
[
0
,
precision
]
else
"%00.
#{
precision
}
f"
%
rounded_number
end
else
formatted_string
=
number
end
delimited_number
=
NumberToDelimitedConverter
.
convert
(
formatted_string
,
options
)
format_number
(
delimited_number
)
end
...
...
activesupport/test/number_helper_test.rb
浏览文件 @
d7318599
...
...
@@ -83,6 +83,10 @@ def test_number_to_percentage
assert_equal
(
"98a%"
,
number_helper
.
number_to_percentage
(
"98a"
))
assert_equal
(
"NaN%"
,
number_helper
.
number_to_percentage
(
Float
::
NAN
))
assert_equal
(
"Inf%"
,
number_helper
.
number_to_percentage
(
Float
::
INFINITY
))
assert_equal
(
"1000%"
,
number_helper
.
number_to_percentage
(
1000
,
precision:
nil
))
assert_equal
(
"1000%"
,
number_helper
.
number_to_percentage
(
1000
,
precision:
nil
))
assert_equal
(
"1000.1%"
,
number_helper
.
number_to_percentage
(
1000.1
,
precision:
nil
))
assert_equal
(
"-0.13 %"
,
number_helper
.
number_to_percentage
(
"-0.13"
,
precision:
nil
,
format:
"%n %"
))
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录