Browse Source

[ZF-9319] Zend_Locale:

- implemented rounding for numbers without format but precision

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21492 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 years ago
parent
commit
6d0e0b3007
2 changed files with 19 additions and 2 deletions
  1. 5 1
      library/Zend/Locale/Format.php
  2. 14 1
      tests/Zend/Locale/FormatTest.php

+ 5 - 1
library/Zend/Locale/Format.php

@@ -311,6 +311,10 @@ class Zend_Locale_Format
         if ($format === null) {
             $format  = Zend_Locale_Data::getContent($options['locale'], 'decimalnumber');
             $format  = self::_seperateFormat($format, $value, $options['precision']);
+
+            if ($options['precision'] !== null) {
+                $value   = Zend_Locale_Math::normalize(Zend_Locale_Math::round($value, $options['precision']));
+            }
         } else {
             // seperate negative format pattern when available
             $format  = self::_seperateFormat($format, $value, $options['precision']);
@@ -322,7 +326,7 @@ class Zend_Locale_Format
                         $options['precision'] = null;
                     } else {
                         $options['precision'] = iconv_strlen(iconv_substr($format, iconv_strpos($format, '.') + 1,
-                                                              iconv_strrpos($format, '0') - iconv_strpos($format, '.')));
+                                                             iconv_strrpos($format, '0') - iconv_strpos($format, '.')));
                         $format = iconv_substr($format, 0, iconv_strpos($format, '.') + 1) . '###'
                                 . iconv_substr($format, iconv_strrpos($format, '0') + 1);
                     }

+ 14 - 1
tests/Zend/Locale/FormatTest.php

@@ -732,7 +732,7 @@ class Zend_Locale_FormatTest extends PHPUnit_Framework_TestCase
         $this->assertEquals( '1.234.567,00',      Zend_Locale_Format::toNumber( 1234567,         array('number_format' => '#,##0.00', 'locale' => 'de_AT')));
         $this->assertEquals( '1.234.567,12',      Zend_Locale_Format::toNumber( 1234567.123,     array('precision' => 2,              'locale' => 'de_AT')));
         $this->assertEquals(   '1234567,12-',     Zend_Locale_Format::toNumber(-1234567.123,     array('number_format' => '#0.00-',   'locale' => 'de_AT')));
-        $this->assertEquals(   '-12.345',         Zend_Locale_Format::toNumber(  -12345.67,      array('precision' => 0,              'locale' => 'de_AT')));
+        $this->assertEquals(   '-12.346',         Zend_Locale_Format::toNumber(  -12345.67,      array('precision' => 0,              'locale' => 'de_AT')));
     }
 
     /**
@@ -1082,4 +1082,17 @@ class Zend_Locale_FormatTest extends PHPUnit_Framework_TestCase
     {
         $this->assertEquals(1234, Zend_Locale_Format::getNumber('1234.567', array('locale' => 'en_US', 'precision' => 0)));
     }
+
+    /**
+     * @group ZF-9319
+     */
+    public function testToNumberWithoutFormatWithPrecision()
+    {
+        $options = array('locale' => 'de_AT', 'precision' => 2);
+        $this->assertEquals('3,99', Zend_Locale_Format::toNumber(3.99, $options));
+        $this->assertEquals('3,99', Zend_Locale_Format::toNumber(3.994, $options));
+        $this->assertEquals('4,00', Zend_Locale_Format::toNumber(3.995, $options));
+        $this->assertEquals('4,00', Zend_Locale_Format::toNumber(3.999, $options));
+        $this->assertEquals('4,00', Zend_Locale_Format::toNumber(4, $options));
+    }
 }