]> granicus.if.org Git - php/commitdiff
Allow number_format to be only passed 3 arguments
authorGeorge Peter Banyard <girgias@php.net>
Wed, 12 Aug 2020 17:26:54 +0000 (19:26 +0200)
committerGeorge Peter Banyard <girgias@php.net>
Thu, 13 Aug 2020 16:07:17 +0000 (18:07 +0200)
Closes GH-5977

ext/standard/math.c
ext/standard/tests/math/number_format_with_3_args.phpt [new file with mode: 0644]
ext/standard/tests/math/number_format_with_null_args.phpt [new file with mode: 0644]

index d0c2708256e2c704044bfc840dbc614b74090698..c5e0234fdeefe380542e2c9aa601013cb02e56cb 100644 (file)
@@ -1097,7 +1097,6 @@ PHP_FUNCTION(number_format)
        double num;
        zend_long dec = 0;
        char *thousand_sep = NULL, *dec_point = NULL;
-       char thousand_sep_chr = ',', dec_point_chr = '.';
        size_t thousand_sep_len = 0, dec_point_len = 0;
 
        ZEND_PARSE_PARAMETERS_START(1, 4)
@@ -1108,30 +1107,16 @@ PHP_FUNCTION(number_format)
                Z_PARAM_STRING_OR_NULL(thousand_sep, thousand_sep_len)
        ZEND_PARSE_PARAMETERS_END();
 
-       switch(ZEND_NUM_ARGS()) {
-       case 1:
-               RETURN_STR(_php_math_number_format(num, 0, dec_point_chr, thousand_sep_chr));
-               break;
-       case 2:
-               RETURN_STR(_php_math_number_format(num, (int)dec, dec_point_chr, thousand_sep_chr));
-               break;
-       case 4:
-               if (dec_point == NULL) {
-                       dec_point = &dec_point_chr;
-                       dec_point_len = 1;
-               }
-
-               if (thousand_sep == NULL) {
-                       thousand_sep = &thousand_sep_chr;
-                       thousand_sep_len = 1;
-               }
-
-               RETVAL_STR(_php_math_number_format_ex(num, (int)dec,
-                               dec_point, dec_point_len, thousand_sep, thousand_sep_len));
-               break;
-       default:
-               WRONG_PARAM_COUNT;
+       if (dec_point == NULL) {
+               dec_point = ".";
+               dec_point_len = 1;
+       }
+       if (thousand_sep == NULL) {
+               thousand_sep = ",";
+               thousand_sep_len = 1;
        }
+
+       RETURN_STR(_php_math_number_format_ex(num, (int)dec, dec_point, dec_point_len, thousand_sep, thousand_sep_len));
 }
 /* }}} */
 
diff --git a/ext/standard/tests/math/number_format_with_3_args.phpt b/ext/standard/tests/math/number_format_with_3_args.phpt
new file mode 100644 (file)
index 0000000..72419ea
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+number_format should use default thousands seperator when 3 arguments are used
+--FILE--
+<?php
+
+$number = 2020.1415;
+
+var_dump(number_format($number, 2, 'F'));
+
+?>
+--EXPECT--
+string(8) "2,020F14"
diff --git a/ext/standard/tests/math/number_format_with_null_args.phpt b/ext/standard/tests/math/number_format_with_null_args.phpt
new file mode 100644 (file)
index 0000000..f99a06b
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+number_format should use default values when passed null
+--FILE--
+<?php
+
+$number = 2020.1415;
+
+var_dump(number_format($number, 2, null, 'T'));
+var_dump(number_format($number, 2, 'F', null));
+
+?>
+--EXPECT--
+string(8) "2T020.14"
+string(8) "2,020F14"