diff options
author | Stanislav Malyshev <stas@php.net> | 2000-08-14 10:02:14 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2000-08-14 10:02:14 +0000 |
commit | 97c200b170976fd686c55511a897658b8d0e25f6 (patch) | |
tree | ccfccefffc4b61b5cc59658d302b43badee93b83 /ext/standard/formatted_print.c | |
parent | 9e750e64b9945d11354db2b9a3aad2708dad94ba (diff) | |
download | php-git-97c200b170976fd686c55511a897658b8d0e25f6.tar.gz |
Fix non-numbers printing (#6142)
# Please, somebody knowing about floats - check if there's more non-numbers
# seems we should check for all of them
Diffstat (limited to 'ext/standard/formatted_print.c')
-rw-r--r-- | ext/standard/formatted_print.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index f271ac9daa..1db9451928 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -252,6 +252,39 @@ php_sprintf_appenddouble(char **buffer, int *pos, } else if (precision > MAX_FLOAT_PRECISION) { precision = MAX_FLOAT_PRECISION; } + + if( +#if defined(HAVE_ISNAN) + isnan(number) +#elif defined(NAN) + number == NAN +#else + 0 +#endif + ) { + sign = (number<0); + php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding, + alignment, precision, sign, 0); + return; + } + + if( +#if defined(HAVE_ISISINF) + isinf(number) +#elif defined(HAVE_ISFINITE) + !isfinite(number) +#elif defined(HAVE_FINITE) + !finite(number) +#else + 0 +#endif + ) { + sign = (number<0); + php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding, + alignment, precision, sign, 0); + return; + } + cvt = php_convert_to_decimal(number, precision, &decpt, &sign, (fmt == 'e')); if (sign) { |