summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-19 13:28:32 (GMT)
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-19 13:28:32 (GMT)
commit28dd61607e2e42cd568d8fff7304d406126bd2c3 (patch)
tree16d091f87b062696d4270e2140fb2cf3d72abc35
parentf587347c28cd7b9ea445ca8150cfdb62a761523b (diff)
sprintf.c: fix condition
* sprintf.c (rb_str_format): fix condition to round. [ruby-core:64454] [Bug #10151] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47222 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--sprintf.c2
-rw-r--r--test/ruby/test_sprintf.rb1
3 files changed, 7 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3663704..4029b18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 19 22:28:32 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): fix condition to round.
+ [ruby-core:64454] [Bug #10151]
+
Tue Aug 19 22:22:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* enc/trans/euckr-tbl.rb (EUCKR_TO_UCS_TBL): add missing euro and
diff --git a/sprintf.c b/sprintf.c
index 19338fb..d2bc9f8 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -1045,7 +1045,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
sign = -1;
num = rb_funcallv(num, idUMinus, 0, 0);
}
- if (den != INT2FIX(1) && prec > 1) {
+ if (den != INT2FIX(1) || prec > 1) {
const ID idDiv = rb_intern("div");
VALUE p10 = rb_int_positive_pow(10, prec);
VALUE den_2 = rb_funcall(den, idDiv, 1, INT2FIX(2));
diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb
index 3cfb9ac..0b6bfb0 100644
--- a/test/ruby/test_sprintf.rb
+++ b/test/ruby/test_sprintf.rb
@@ -151,6 +151,7 @@ class TestSprintf < Test::Unit::TestCase
def test_rational
assert_match(/\A0\.10+\z/, sprintf("%.60f", 0.1r))
assert_match(/\A0\.3+\z/, sprintf("%.60f", 1/3r))
+ assert_match(/\A1\.20+\z/, sprintf("%.60f", 1.2r))
end
def test_hash