From c71550472a003cdab67d85de8b5e57268df65531 Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Mon, 31 Aug 2015 18:59:32 +0900 Subject: [PATCH] Fix mode when precision=0. Add test --- main/snprintf.c | 2 +- tests/basic/precision.phpt | 171 +++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 tests/basic/precision.phpt diff --git a/main/snprintf.c b/main/snprintf.c index 80a5c6e249b1..678f879dc357 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -143,7 +143,7 @@ PHPAPI char *php_gcvt(double value, int ndigit, char dec_point, char exponent, c { char *digits, *dst, *src; int i, decpt, sign; - int mode = ndigit > 0 ? 2 : 0; + int mode = ndigit >= 0 ? 2 : 0; if (mode == 0) { ndigit = 17; diff --git a/tests/basic/precision.phpt b/tests/basic/precision.phpt new file mode 100644 index 000000000000..1d7dbdd4438a --- /dev/null +++ b/tests/basic/precision.phpt @@ -0,0 +1,171 @@ +--TEST-- +precision setting test +--INI-- +precision=14 +serialize_precision=17 +--FILE-- + 123456789.01234567, + 1 => 3.3333333333333335, + 2 => 9.87E+102, +) +INI +0 +0 +OUTPUTS +1.0E+8 3 1.0E+103 +1.0E+8 3 1.0E+103 +string(47) "a:3:{i:0;d:1.0E+8;i:1;d:3.0E+0;i:2;d:1.0E+103;}" +array ( + 0 => 1.0E+8, + 1 => 3.0E+0, + 2 => 1.0E+103, +) +INI +9 +9 +OUTPUTS +123456789 3.33333333 9.87E+102 +123456789 3.33333333 9.87E+102 +string(55) "a:3:{i:0;d:123456789;i:1;d:3.33333333;i:2;d:9.87E+102;}" +array ( + 0 => 123456789, + 1 => 3.33333333, + 2 => 9.87E+102, +) +INI +14 +14 +OUTPUTS +123456789.01235 3.3333333333333 9.87E+102 +123456789.01235 3.3333333333333 9.87E+102 +string(66) "a:3:{i:0;d:123456789.01235;i:1;d:3.3333333333333;i:2;d:9.87E+102;}" +array ( + 0 => 123456789.01235, + 1 => 3.3333333333333, + 2 => 9.87E+102, +) +INI +17 +17 +OUTPUTS +123456789.01234567 3.3333333333333335 9.8700000000000007E+102 +123456789.01234567 3.3333333333333335 9.8700000000000007E+102 +string(86) "a:3:{i:0;d:123456789.01234567;i:1;d:3.3333333333333335;i:2;d:9.8700000000000007E+102;}" +array ( + 0 => 123456789.01234567, + 1 => 3.3333333333333335, + 2 => 9.8700000000000007E+102, +) +INI +25 +25 +OUTPUTS +123456789.0123456716537476 3.33333333333333348136307 9.870000000000000687310143E+102 +123456789.0123456716537476 3.33333333333333348136307 9.870000000000000687310143E+102 +string(109) "a:3:{i:0;d:123456789.0123456716537476;i:1;d:3.33333333333333348136307;i:2;d:9.870000000000000687310143E+102;}" +array ( + 0 => 123456789.0123456716537476, + 1 => 3.33333333333333348136307, + 2 => 9.870000000000000687310143E+102, +) +INI +100 +100 +OUTPUTS +123456789.01234567165374755859375 3.333333333333333481363069950020872056484222412109375 9.87000000000000068731014283095442748328521861543465424509123736073120616987695396574376473706259651E+102 +123456789.01234567165374755859375 3.333333333333333481363069950020872056484222412109375 9.87000000000000068731014283095442748328521861543465424509123736073120616987695396574376473706259651E+102 +string(218) "a:3:{i:0;d:123456789.01234567165374755859375;i:1;d:3.333333333333333481363069950020872056484222412109375;i:2;d:9.87000000000000068731014283095442748328521861543465424509123736073120616987695396574376473706259651E+102;}" +array ( + 0 => 123456789.01234567165374755859375, + 1 => 3.333333333333333481363069950020872056484222412109375, + 2 => 9.87000000000000068731014283095442748328521861543465424509123736073120616987695396574376473706259651E+102, +)