Просмотр исходного кода

[ZF-7922] Zend_Locale:

- allow localization/normalization for truncated floats

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18406 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 лет назад
Родитель
Сommit
8b3775a12a
2 измененных файлов с 51 добавлено и 7 удалено
  1. 3 0
      library/Zend/Locale/Format.php
  2. 48 7
      tests/Zend/Locale/FormatTest.php

+ 3 - 0
library/Zend/Locale/Format.php

@@ -499,6 +499,9 @@ class Zend_Locale_Format
 
         $regexs = Zend_Locale_Format::_getRegexForType('decimalnumber', $options);
         $regexs = array_merge($regexs, Zend_Locale_Format::_getRegexForType('scientificnumber', $options));
+        if (!empty($input) && ($input[0] == $symbols['decimal'])) {
+            $input = 0 . $input;
+        }
         foreach ($regexs as $regex) {
             preg_match($regex, $input, $found);
             if (isset($found[0])) {

+ 48 - 7
tests/Zend/Locale/FormatTest.php

@@ -1028,12 +1028,53 @@ class Zend_Locale_FormatTest extends PHPUnit_Framework_TestCase
      */
     public function testScientificNumbers()
     {
-        $this->assertEquals(   '0,0', Zend_Locale_Format::toNumber(  1E-2, array('precision' => 1, 'locale' => 'de_AT')));
-        $this->assertEquals(   '0,0100', Zend_Locale_Format::toNumber(  1E-2, array('precision' => 4, 'locale' => 'de_AT')));
-        $this->assertEquals(   '100,0', Zend_Locale_Format::toNumber(  1E+2, array('precision' => 1, 'locale' => 'de_AT')));
-        $this->assertEquals(   '100,0000', Zend_Locale_Format::toNumber(  1E+2, array('precision' => 4, 'locale' => 'de_AT')));
-        $this->assertEquals(   '0', Zend_Locale_Format::toNumber(  1E-5, array('precision' => 0, 'locale' => 'de_AT')));
-        $this->assertEquals(   '0,00001', Zend_Locale_Format::toNumber(  1.3E-5, array('precision' => 5, 'locale' => 'de_AT')));
-        $this->assertEquals(   '0,000013', Zend_Locale_Format::toNumber(  1.3E-5, array('precision' => 6, 'locale' => 'de_AT')));
+        $this->assertEquals('0,0', Zend_Locale_Format::toNumber(  1E-2, array('precision' => 1, 'locale' => 'de_AT')));
+        $this->assertEquals('0,0100', Zend_Locale_Format::toNumber(  1E-2, array('precision' => 4, 'locale' => 'de_AT')));
+        $this->assertEquals('100,0', Zend_Locale_Format::toNumber(  1E+2, array('precision' => 1, 'locale' => 'de_AT')));
+        $this->assertEquals('100,0000', Zend_Locale_Format::toNumber(  1E+2, array('precision' => 4, 'locale' => 'de_AT')));
+        $this->assertEquals('0', Zend_Locale_Format::toNumber(  1E-5, array('precision' => 0, 'locale' => 'de_AT')));
+        $this->assertEquals('0,00001', Zend_Locale_Format::toNumber(  1.3E-5, array('precision' => 5, 'locale' => 'de_AT')));
+        $this->assertEquals('0,000013', Zend_Locale_Format::toNumber(  1.3E-5, array('precision' => 6, 'locale' => 'de_AT')));
+    }
+
+    public function testShortNotation()
+    {
+        $this->assertEquals(.12345, Zend_Locale_Format::getNumber(.12345));
+        $options = array('locale' => 'de');
+        $this->assertEquals(.12345, Zend_Locale_Format::getNumber(',12345', $options));
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals(.12345, Zend_Locale_Format::getNumber(',12345', $options));
+
+        $this->assertEquals('0,75', Zend_Locale_Format::toNumber(.75, array('locale' => 'de_DE', 'precision' => 2)));
+
+        $this->assertTrue(Zend_Locale_Format::isNumber(',12345',  array('locale' => 'de_AT')));
+
+        $this->assertEquals(.12345, Zend_Locale_Format::getFloat(.12345));
+        $options = array('locale' => 'de');
+        $this->assertEquals(.12345, Zend_Locale_Format::getFloat(',12345', $options));
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals(.12345, Zend_Locale_Format::getFloat(',12345', $options));
+
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals('0,12345', Zend_Locale_Format::toFloat(.12345, $options));
+        $options = array('locale' => 'ar_QA');
+        $this->assertEquals('0,12345',  Zend_Locale_Format::toFloat(.12345, $options));
+
+        $this->assertTrue(Zend_Locale_Format::isFloat(',12345',  array('locale' => 'de_AT')));
+
+        $this->assertEquals(0, Zend_Locale_Format::getInteger(.1234567));
+        $options = array('locale' => 'de');
+        $this->assertEquals(0, Zend_Locale_Format::getInteger(',12345', $options));
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals(0, Zend_Locale_Format::getInteger(',12345', $options));
+
+        $this->assertEquals('0', Zend_Locale_Format::toInteger(.123, array('locale' => 'de')));
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals('0',  Zend_Locale_Format::toInteger(.12345, $options));
+
+        $this->assertFalse(Zend_Locale_Format::isInteger(',12345', array('locale' => 'de_AT')));
+
+        $options = array('locale' => 'de_AT');
+        $this->assertEquals('0,567', Zend_Locale_Format::toNumber(.567, $options));
     }
 }