WordPress.org

Make WordPress Core

Ticket #35840: 35840_2.patch

File 35840_2.patch, 3.8 KB (added by pbearne, 6 years ago)

Both function (with case to float) and unit tests

  • src/wp-includes/functions.php

     
    219219        global $wp_locale;
    220220
    221221        if ( isset( $wp_locale ) ) {
    222                 $formatted = number_format( $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
     222                $formatted = number_format( (float) $number, absint( $decimals ), $wp_locale->number_format['decimal_point'], $wp_locale->number_format['thousands_sep'] );
    223223        } else {
    224                 $formatted = number_format( $number, absint( $decimals ) );
     224                $formatted = number_format( (float) $number, absint( $decimals ) );
    225225        }
    226226
    227227        /**
  • tests/phpunit/tests/functions/number_format_i18n.php

     
     1<?php
     2/**
     3 *      Test the number_format_i18n function by providing a string, wrong format,
     4 *      custom separators, and agains the values from en_US (, for thousands - . for decimal)
     5 *      and pt_BR (. for thousands - , for decimal).
     6 *
     7 * @group functions
     8 */
     9class Tests_Functions_number_format_i18n extends WP_UnitTestCase {
     10
     11        /**
     12         *
     13         */
     14        function test_number_format_i18n_number_is_not_number() {
     15
     16                $this->assertEquals( 0, number_format_i18n( 'seven' ) );
     17
     18        }
     19        /**
     20         *
     21         */
     22        function test_number_format_i18n_number_in_a_string() {
     23
     24                $this->assertEquals( 7, number_format_i18n( '7' ) );
     25        }
     26        /**
     27         *
     28         */
     29        function test_number_format_i18n_decimal_is_not_number() {
     30
     31                $this->assertEquals( number_format_i18n( 10, 'seven' ) , '10' );
     32        }
     33        /**
     34         *
     35         */
     36        function test_number_format_i18n_decimal_is_not_number_no_in_string() {
     37
     38                $this->assertEquals( number_format_i18n( 10, '7' ) , 10.0000000 );
     39        }
     40        /**
     41         *
     42         *
     43         */
     44        function test_number_format_i18n_custom_separator() {
     45                global $wp_locale;
     46                $wp_locale->number_format['decimal_point'] = '@';
     47                $wp_locale->number_format['thousands_sep'] = '^';
     48
     49                $this->assertEquals( '1^000@00', number_format_i18n( 1000.00, 2 ) );
     50                $this->assertEquals( '1^000@00', number_format_i18n( (int)1000, 2 ) );
     51                $this->assertEquals( '1^234^567^890@00000', number_format_i18n( 1234567890.00, 5 ) );
     52                $this->assertEquals( '1^234^567^890@99999', number_format_i18n( 1234567890.99999, 5 ) );
     53                $this->assertEquals( '1^234^567^890@50000', number_format_i18n( 1234567890.5, 5 ) );
     54                // clear $wp_locale
     55                $wp_locale = null;
     56        }
     57        /**
     58         *
     59         */
     60        function test_number_format_i18n_no_global_and_us() {
     61
     62                $this->assertEquals( '1,000.00', number_format_i18n( 1000.00, 2 ) );
     63                $this->assertEquals( '1,000.00', number_format_i18n( (int)1000, 2 ) );
     64                $this->assertEquals( '1,234,567,890.00000', number_format_i18n( 1234567890.00, 5 ) );
     65                $this->assertEquals( '1,234,567,890.99999', number_format_i18n( 1234567890.99999, 5 ) );
     66                $this->assertEquals( '1,234,567,890.50000', number_format_i18n( 1234567890.5, 5 ) );
     67        }
     68
     69        /**
     70         *
     71         */
     72        function test_number_format_i18n_brazil() {
     73                global $wp_locale;
     74                $wp_locale->number_format['decimal_point'] = ',';
     75                $wp_locale->number_format['thousands_sep'] = '.';
     76
     77                $this->assertEquals( '1.000,00', number_format_i18n( 1000.00, 2 ) );
     78                $this->assertEquals( '1.000,00', number_format_i18n( (int)1000, 2 ) );
     79                $this->assertEquals( '1.234.567.890,00000', number_format_i18n( 1234567890.00, 5 ) );
     80                $this->assertEquals( '1.234.567.890,99999', number_format_i18n( 1234567890.99999, 5 ) );
     81                $this->assertEquals( '1.234.567.890,50000', number_format_i18n( 1234567890.5, 5 ) );
     82                // clear $wp_locale
     83                $wp_locale = null;
     84        }
     85}
     86 No newline at end of file