summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/numeric.c b/numeric.c
index 318d6046f3..187044ee5e 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1299,11 +1299,16 @@ flo_round(int argc, VALUE *argv, VALUE num)
while (--i >= 0)
f = f*10.0;
- if (ndigits < 0) number /= f;
- else number *= f;
- number = round(number);
- if (ndigits < 0) number *= f;
- else number /= f;
+ if (isinf(f)) {
+ if (ndigits < 0) number = 0;
+ }
+ else {
+ if (ndigits < 0) number /= f;
+ else number *= f;
+ number = round(number);
+ if (ndigits < 0) number *= f;
+ else number /= f;
+ }
if (ndigits > 0) return DOUBLE2NUM(number);