diff --git a/src/post_modules/JSON/json_number.c b/src/post_modules/JSON/json_number.c
index 111f30e669d8e7343cb3c8182d73fb2c0fcd44ac..cf5f047db994cd608901f4fed2ae12dd3c2ddb31 100644
--- a/src/post_modules/JSON/json_number.c
+++ b/src/post_modules/JSON/json_number.c
@@ -202,7 +202,11 @@ case 10:
     if (cs >= JSON_number_first_final) {
 	if (!(state->flags&JSON_VALIDATE)) {
 	    if (d == 1) {
+#if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE
+		push_float((FLOAT_TYPE)STRTOLD_PCHARP(ADD_PCHARP(str, i), NULL));
+#else
 		push_float((FLOAT_TYPE)STRTOD_PCHARP(ADD_PCHARP(str, i), NULL));
+#endif
 	    } else {
 		pcharp_to_svalue_inumber(Pike_sp++, ADD_PCHARP(str, i), NULL, 10, p - i);
 	    }
diff --git a/src/post_modules/JSON/rl/json_number.rl b/src/post_modules/JSON/rl/json_number.rl
index 0f79b8fe7370f84aa87763e0658014fa464661e2..a8c247a534c4736ad00af177e46e8d2b0d3c8dc7 100644
--- a/src/post_modules/JSON/rl/json_number.rl
+++ b/src/post_modules/JSON/rl/json_number.rl
@@ -32,7 +32,11 @@ static ptrdiff_t _parse_JSON_number(PCHARP str, ptrdiff_t p, ptrdiff_t pe, struc
     if (cs >= JSON_number_first_final) {
 	if (!(state->flags&JSON_VALIDATE)) {
 	    if (d == 1) {
+#if SIZEOF_FLOAT_TYPE > SIZEOF_DOUBLE
+		push_float((FLOAT_TYPE)STRTOLD_PCHARP(ADD_PCHARP(str, i), NULL));
+#else
 		push_float((FLOAT_TYPE)STRTOD_PCHARP(ADD_PCHARP(str, i), NULL));
+#endif
 	    } else {
 		pcharp_to_svalue_inumber(Pike_sp++, ADD_PCHARP(str, i), NULL, 10, p - i);
 	    }