Browse Source

Starting to use NumberFormatter in the Number lib

Jose Lorenzo Rodriguez 11 years ago
parent
commit
335342feb0
2 changed files with 11 additions and 14 deletions
  1. 5 2
      src/Utility/Number.php
  2. 6 12
      tests/TestCase/Utility/NumberTest.php

+ 5 - 2
src/Utility/Number.php

@@ -15,6 +15,7 @@
 namespace Cake\Utility;
 
 use Cake\Error\Exception;
+use NumberFormatter;
 
 /**
  * Number helper library.
@@ -98,7 +99,9 @@ class Number {
  * @link http://book.cakephp.org/2.0/en/core-libraries/helpers/number.html#NumberHelper::precision
  */
 	public static function precision($value, $precision = 3) {
-		return sprintf("%01.{$precision}f", $value);
+		$formatter = new NumberFormatter(ini_get('intl.default_locale'), NumberFormatter::DECIMAL);
+		$formatter->setAttribute(NumberFormatter::MIN_FRACTION_DIGITS, $precision);
+		return $formatter->format($value);
 	}
 
 /**
@@ -119,7 +122,7 @@ class Number {
 			case round($size / 1024 / 1024 / 1024, 2) < 1024:
 				return __d('cake', '{0,number,#,###.##} GB', $size / 1024 / 1024 / 1024);
 			default:
-				return __d('cake', '{0,number} TB', $size / 1024 / 1024 / 1024 / 1024);
+				return __d('cake', '{0,number,#,###.##} TB', $size / 1024 / 1024 / 1024 / 1024);
 		}
 	}
 

+ 6 - 12
tests/TestCase/Utility/NumberTest.php

@@ -33,6 +33,7 @@ class NumberTest extends TestCase {
 	public function setUp() {
 		parent::setUp();
 		$this->Number = new Number();
+		$this->locale = ini_get('intl.default_locale');
 	}
 
 /**
@@ -43,6 +44,7 @@ class NumberTest extends TestCase {
 	public function tearDown() {
 		parent::tearDown();
 		unset($this->Number);
+		ini_set('intl.default_locale', $this->locale);
 	}
 
 /**
@@ -669,16 +671,12 @@ class NumberTest extends TestCase {
  * @return void
  */
 	public function testReadableSizeLocalized() {
-		$restore = setlocale(LC_NUMERIC, 0);
-
-		$this->skipIf(setlocale(LC_NUMERIC, 'de_DE') === false, "The German locale isn't available.");
-
+		ini_set('intl.default_locale', 'fr_FR');
 		$result = $this->Number->toReadableSize(1321205);
 		$this->assertEquals('1,26 MB', $result);
 
-		$result = $this->Number->toReadableSize(1024 * 1024 * 1024 * 512);
-		$this->assertEquals('512,00 GB', $result);
-		setlocale(LC_NUMERIC, $restore);
+		$result = $this->Number->toReadableSize(512.05 * 1024 * 1024 * 1024);
+		$this->assertEquals('512,05 GB', $result);
 	}
 
 /**
@@ -687,13 +685,9 @@ class NumberTest extends TestCase {
  * @return void
  */
 	public function testPrecisionLocalized() {
-		$restore = setlocale(LC_NUMERIC, 0);
-
-		$this->skipIf(setlocale(LC_NUMERIC, 'de_DE') === false, "The German locale isn't available.");
-
+		ini_set('intl.default_locale', 'fr_FR');
 		$result = $this->Number->precision(1.234);
 		$this->assertEquals('1,234', $result);
-		setlocale(LC_NUMERIC, $restore);
 	}
 
 /**