]> granicus.if.org Git - php/commitdiff
Fix mode when precision=0. Add test
authorYasuo Ohgaki <yohgaki@php.net>
Mon, 31 Aug 2015 09:59:32 +0000 (18:59 +0900)
committerJakub Zelenka <bukka@php.net>
Sun, 26 Jun 2016 12:26:43 +0000 (13:26 +0100)
main/snprintf.c
tests/basic/precision.phpt [new file with mode: 0644]

index 80a5c6e249b11aef30745dc8f9dc1271f16a5f90..678f879dc357c736aae19982e37ca06203bdd2b6 100644 (file)
@@ -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 (file)
index 0000000..1d7dbdd
--- /dev/null
@@ -0,0 +1,171 @@
+--TEST--
+precision setting test
+--INI--
+precision=14
+serialize_precision=17
+--FILE--
+<?php
+$v = array(123456789.012345678901234567890, 10/3, 987e100);
+
+echo "INI".PHP_EOL;
+ini_set('precision', -1);
+ini_set('serialize_precision', -1);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+
+echo "INI".PHP_EOL;
+ini_set('precision', 0);
+ini_set('serialize_precision', 0);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+echo "INI".PHP_EOL;
+ini_set('precision', 9);
+ini_set('serialize_precision', 9);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+echo "INI".PHP_EOL;
+ini_set('precision', 14);
+ini_set('serialize_precision', 14);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+echo "INI".PHP_EOL;
+ini_set('precision', 17);
+ini_set('serialize_precision', 17);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+echo "INI".PHP_EOL;
+ini_set('precision', 25);
+ini_set('serialize_precision', 25);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+
+echo "INI".PHP_EOL;
+ini_set('precision', 100);
+ini_set('serialize_precision', 100);
+echo ini_get('precision'), PHP_EOL;
+echo ini_get('serialize_precision'), PHP_EOL;
+echo "OUTPUTS".PHP_EOL;
+echo join($v, ' ').PHP_EOL;
+print join($v, ' ').PHP_EOL;
+var_dump(serialize($v));
+var_export($v);echo PHP_EOL;
+--EXPECT--
+INI
+-1
+-1
+OUTPUTS
+123456789.01234567 3.3333333333333335 9.87E+102
+123456789.01234567 3.3333333333333335 9.87E+102
+string(72) "a:3:{i:0;d:123456789.01234567;i:1;d:3.3333333333333335;i:2;d:9.87E+102;}"
+array (
+  0 => 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,
+)