From e35bd80dfbe4f0634da252f61783521d64437c9a Mon Sep 17 00:00:00 2001 From: Phally Date: Tue, 9 Jul 2013 21:01:55 +0200 Subject: [PATCH] Adds option to multiply decimal percentages. Fixes #3814 --- lib/Cake/Test/Case/Utility/CakeNumberTest.php | 24 +++++++++++++++++++ lib/Cake/Utility/CakeNumber.php | 11 ++++++++- lib/Cake/View/Helper/NumberHelper.php | 5 ++-- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/Cake/Test/Case/Utility/CakeNumberTest.php b/lib/Cake/Test/Case/Utility/CakeNumberTest.php index 32fcac0ec..fafbe8a19 100644 --- a/lib/Cake/Test/Case/Utility/CakeNumberTest.php +++ b/lib/Cake/Test/Case/Utility/CakeNumberTest.php @@ -650,6 +650,30 @@ class CakeNumberTest extends CakeTestCase { $result = $this->Number->toPercentage(0, 4); $expected = '0.0000%'; $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(45, 0, array('multiply' => false)); + $expected = '45%'; + $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(45, 2, array('multiply' => false)); + $expected = '45.00%'; + $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(0, 0, array('multiply' => false)); + $expected = '0%'; + $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(0, 4, array('multiply' => false)); + $expected = '0.0000%'; + $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(0.456, 0, array('multiply' => true)); + $expected = '46%'; + $this->assertEquals($expected, $result); + + $result = $this->Number->toPercentage(0.456, 2, array('multiply' => true)); + $expected = '45.60%'; + $this->assertEquals($expected, $result); } /** diff --git a/lib/Cake/Utility/CakeNumber.php b/lib/Cake/Utility/CakeNumber.php index 49529e9c3..94c8087ad 100644 --- a/lib/Cake/Utility/CakeNumber.php +++ b/lib/Cake/Utility/CakeNumber.php @@ -160,12 +160,21 @@ class CakeNumber { /** * Formats a number into a percentage string. * + * Options: + * + * - `multiply`: Multiply the input value by 100 for decimal percentages. + * * @param float $value A floating point number * @param integer $precision The precision of the returned number + * @param array $options Options * @return string Percentage string * @link http://book.cakephp.org/2.0/en/core-libraries/helpers/number.html#NumberHelper::toPercentage */ - public static function toPercentage($value, $precision = 2) { + public static function toPercentage($value, $precision = 2, $options = array()) { + $options += array('multiply' => false); + if ($options['multiply']) { + $value *= 100; + } return self::precision($value, $precision) . '%'; } diff --git a/lib/Cake/View/Helper/NumberHelper.php b/lib/Cake/View/Helper/NumberHelper.php index 79fcc9946..ddf3b483b 100644 --- a/lib/Cake/View/Helper/NumberHelper.php +++ b/lib/Cake/View/Helper/NumberHelper.php @@ -101,11 +101,12 @@ class NumberHelper extends AppHelper { * * @param float $number A floating point number * @param integer $precision The precision of the returned number + * @param array $options Options * @return string Percentage string * @link http://book.cakephp.org/2.0/en/core-libraries/helpers/number.html#NumberHelper::toPercentage */ - public function toPercentage($number, $precision = 2) { - return $this->_engine->toPercentage($number, $precision); + public function toPercentage($number, $precision = 2, $options = array()) { + return $this->_engine->toPercentage($number, $precision, $options); } /**