summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2007-06-04 23:51:32 +0000
committerIlia Alshanetsky <iliaa@php.net>2007-06-04 23:51:32 +0000
commit045b283a7d014deb38e7f8763d3ad098efce2afd (patch)
tree90e78494a2de84373eea9a6baf7b43fa7a462317 /ext
parentbd7c9ebeb0bc767a2a84d24ebe554e029748764d (diff)
downloadphp-git-045b283a7d014deb38e7f8763d3ad098efce2afd.tar.gz
Fixed bug #41567 (json_encode() double conversion is inconsistent with PHP).
Diffstat (limited to 'ext')
-rw-r--r--ext/json/json.c2
-rw-r--r--ext/json/tests/bug41567.phpt13
2 files changed, 14 insertions, 1 deletions
diff --git a/ext/json/json.c b/ext/json/json.c
index fefdf9601e..737421f5ac 100644
--- a/ext/json/json.c
+++ b/ext/json/json.c
@@ -354,7 +354,7 @@ static void json_encode_r(smart_str *buf, zval *val TSRMLS_DC) {
double dbl = Z_DVAL_P(val);
if (!zend_isinf(dbl) && !zend_isnan(dbl)) {
- len = spprintf(&d, 0, "%.9g", dbl);
+ len = spprintf(&d, 0, "%.*g", (int) EG(precision), dbl);
if (d) {
if (dbl > LONG_MAX && !memchr(d, '.', len)) {
smart_str_append_unsigned(buf, (unsigned long)Z_DVAL_P(val));
diff --git a/ext/json/tests/bug41567.phpt b/ext/json/tests/bug41567.phpt
new file mode 100644
index 0000000000..837c360a87
--- /dev/null
+++ b/ext/json/tests/bug41567.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #41567 (json_encode() double conversion is inconsistent with PHP)
+--FILE--
+<?php
+
+$a = json_encode(123456789.12345);
+var_dump(json_decode($a));
+
+echo "Done\n";
+?>
+--EXPECT--
+float(123456789.12345)
+Done