From 8ec9d7072e73a3574c073532756d07bf7048432b Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Fri, 11 Nov 2011 17:23:12 +0000 Subject: [PATCH] Make commafy support negative numbers too, Add test cases. Ref Bug 32359 and Followup r97793 --- languages/Language.php | 10 ++++++++-- tests/phpunit/languages/LanguageMlTest.php | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/languages/Language.php b/languages/Language.php index 2e357432f3..48fd882746 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -2722,6 +2722,12 @@ class Language { return strrev( (string)preg_replace( '/(\d{3})(?=\d)(?!\d*\.)/', '$1,', strrev( $_ ) ) ); } else { // Ref: http://cldr.unicode.org/translation/number-patterns + $sign = ""; + if ( intval( $_ ) < 0 ) { + // For negative numbers apply the algorithm like positive number and add sign. + $sign = $_[0]; + $_ = substr( $_,1 ); + } $numberpart = array(); $decimalpart = array(); $numMatches = preg_match_all( "/(#+)/", $digitGroupingPattern, $matches ); @@ -2730,7 +2736,7 @@ class Language { $groupedNumber = ( count( $decimalpart ) > 0 ) ? $decimalpart[0]:""; if ( $groupedNumber === $_ ) { // the string does not have any number part. Eg: .12345 - return $groupedNumber; + return $sign . $groupedNumber; } $start = $end = strlen( $numberpart[0] ); while ( $start > 0 ) { @@ -2750,7 +2756,7 @@ class Language { $groupedNumber = "," . $groupedNumber; } } - return $groupedNumber; + return $sign . $groupedNumber; } } /** diff --git a/tests/phpunit/languages/LanguageMlTest.php b/tests/phpunit/languages/LanguageMlTest.php index a947e788b8..c659e5c5e0 100644 --- a/tests/phpunit/languages/LanguageMlTest.php +++ b/tests/phpunit/languages/LanguageMlTest.php @@ -26,5 +26,7 @@ class LanguageMlTest extends MediaWikiTestCase { $this->assertEquals( '12,345.56', $this->lang->formatNum( '12345.56' ) ); $this->assertEquals( '12,34,56,79,81,23,45,678', $this->lang->formatNum( '12345679812345678' ) ); $this->assertEquals( '.12345', $this->lang->formatNum( '.12345' ) ); + $this->assertEquals( '-12,00,000', $this->lang->formatNum( '-1200000' ) ); + $this->assertEquals( '-98', $this->lang->formatNum( '-98' ) ); } } -- 2.20.1