From 20e1580fadc08ed87a2a9c3f118b2268112edee8 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Mon, 28 Aug 2006 05:14:05 +0000 Subject: [PATCH] re PR libfortran/28354 ([4.1 Only] 0.99999 printed as 0. instead of 1. by format(f3.0)) 2006-08-27 Jerry DeLisle PR libgfortran/28354 * io/write.c: Check for special case of zero precision in format and pre-round the real value. From-SVN: r116502 --- libgfortran/ChangeLog | 6 ++++++ libgfortran/io/write.c | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 773f80636dbe..7151344be7e7 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2006-08-27 Jerry DeLisle + + PR libgfortran/28354 + * io/write.c: Check for special case of zero precision in format + and pre-round the real value. + 2006-08-15 Jerry DeLisle PR libgfortran/25828 diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index bee367c49ae7..79018ccd4fad 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -426,6 +426,15 @@ output_float (st_parameter_dt *dtp, const fnode *f, GFC_REAL_LARGEST value) if (value < 0) value = -value; + /* Special case when format specifies no digits after the decimal point. */ + if (d == 0) + { + if (value < 0.5) + value = 0.0; + else if (value < 1.0) + value = value + 0.5; + } + /* Printf always prints at least two exponent digits. */ if (value == 0) edigits = 2;