Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
006ec77e
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,发现更多精彩内容 >>
提交
006ec77e
编写于
12月 16, 2010
作者:
D
Don Wilson
提交者:
Piotr Sarnacki
12月 17, 2010
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixed number_with_precision rounding error [#6182 state:resolved]
上级
3b9120fa
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
8 addition
and
2 deletion
+8
-2
actionpack/lib/action_view/helpers/number_helper.rb
actionpack/lib/action_view/helpers/number_helper.rb
+3
-2
actionpack/test/template/number_helper_test.rb
actionpack/test/template/number_helper_test.rb
+5
-0
未找到文件。
actionpack/lib/action_view/helpers/number_helper.rb
浏览文件 @
006ec77e
...
...
@@ -270,12 +270,13 @@ def number_with_precision(number, options = {})
digits
,
rounded_number
=
1
,
0
else
digits
=
(
Math
.
log10
(
number
.
abs
)
+
1
).
floor
rounded_number
=
BigDecimal
.
new
((
number
/
10
**
(
digits
-
precision
)).
to_s
).
round
.
to_f
*
10
**
(
digits
-
precision
)
rounded_number
=
(
BigDecimal
.
new
(
number
.
to_s
)
/
10
**
(
digits
-
precision
)).
round
.
to_f
*
10
**
(
digits
-
precision
)
digits
=
(
Math
.
log10
(
rounded_number
.
abs
)
+
1
).
floor
# After rounding, the number of digits may have changed
end
precision
-=
digits
precision
=
precision
>
0
?
precision
:
0
#don't let it be negative
else
rounded_number
=
BigDecimal
.
new
(
(
number
*
(
10
**
precision
)).
to_s
).
round
.
to_f
/
10
**
precision
rounded_number
=
BigDecimal
.
new
(
number
.
to_s
).
round
(
precision
).
to_f
end
formatted_number
=
number_with_delimiter
(
"%01.
#{
precision
}
f"
%
rounded_number
,
options
)
if
strip_insignificant_zeros
...
...
actionpack/test/template/number_helper_test.rb
浏览文件 @
006ec77e
...
...
@@ -100,6 +100,11 @@ def test_number_with_precision
assert_equal
(
"0"
,
number_with_precision
(
0
,
:precision
=>
0
))
assert_equal
(
"0.00100"
,
number_with_precision
(
0.001
,
:precision
=>
5
))
assert_equal
(
"0.001"
,
number_with_precision
(
0.00111
,
:precision
=>
3
))
assert_equal
(
"10.00"
,
number_with_precision
(
9.995
,
:precision
=>
2
))
assert_equal
(
"11.00"
,
number_with_precision
(
10.995
,
:precision
=>
2
))
assert_equal
(
"10.0"
,
number_with_precision
(
9.995
,
:precision
=>
3
,
:significant
=>
true
))
assert_equal
(
"9.99"
,
number_with_precision
(
9.994
,
:precision
=>
3
,
:significant
=>
true
))
assert_equal
(
"11.0"
,
number_with_precision
(
10.995
,
:precision
=>
3
,
:significant
=>
true
))
end
def
test_number_with_precision_with_custom_delimiter_and_separator
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录