コード例 #1
0
ファイル: PhpMath.php プロジェクト: vojtajina/sitellite
 public static function disable()
 {
     self::$_bcmathDisabled = true;
     self::$add = 'Zend_Locale_Math_Add';
     self::$sub = 'Zend_Locale_Math_Sub';
     self::$pow = 'Zend_Locale_Math_Pow';
     self::$mul = 'Zend_Locale_Math_Mul';
     self::$div = 'Zend_Locale_Math_Div';
     self::$comp = 'Zend_Locale_Math_Comp';
     self::$sqrt = 'Zend_Locale_Math_Sqrt';
     self::$mod = 'Zend_Locale_Math_Mod';
     self::$scale = 'Zend_Locale_Math_Scale';
 }
コード例 #2
0
ファイル: PhpMath.php プロジェクト: Simarpreet05/joomla
 public static function Scale($scale)
 {
     if ($scale > 9) {
         require_once 'Zend/Locale/Math/Exception.php';
         throw new Zend_Locale_Math_Exception("can not scale to precision {$scale}", $scale, null, null);
     }
     self::$defaultScale = $scale;
     self::$defaultPrecision = pow(10, -$scale);
     return true;
 }
コード例 #3
0
ファイル: Math.php プロジェクト: netconstructor/Centurion
 /**
  * Surprisingly, the results of this implementation of round()
  * prove better than the native PHP round(). For example, try:
  *   round(639.795, 2);
  *   round(267.835, 2);
  *   round(0.302515, 5);
  *   round(0.36665, 4);
  * then try:
  *   Zend_Locale_Math::round('639.795', 2);
  */
 public static function round($op1, $precision = 0)
 {
     if (self::$_bcmathDisabled) {
         $op1 = round($op1, $precision);
         if (strpos((string) $op1, 'E') === false) {
             return self::normalize(round($op1, $precision));
         }
     }
     if (strpos($op1, 'E') !== false) {
         $op1 = self::floatalize($op1);
     }
     $op1 = trim(self::normalize($op1));
     $length = strlen($op1);
     if (($decPos = strpos($op1, '.')) === false) {
         $op1 .= '.0';
         $decPos = $length;
         $length += 2;
     }
     if ($precision < 0 && abs($precision) > $decPos) {
         return '0';
     }
     $digitsBeforeDot = $length - ($decPos + 1);
     if ($precision >= $length - ($decPos + 1)) {
         return $op1;
     }
     if ($precision === 0) {
         $triggerPos = 1;
         $roundPos = -1;
     } elseif ($precision > 0) {
         $triggerPos = $precision + 1;
         $roundPos = $precision;
     } else {
         $triggerPos = $precision;
         $roundPos = $precision - 1;
     }
     $triggerDigit = $op1[$triggerPos + $decPos];
     if ($precision < 0) {
         // zero fill digits to the left of the decimal place
         $op1 = substr($op1, 0, $decPos + $precision) . str_pad('', abs($precision), '0');
     }
     if ($triggerDigit >= '5') {
         if ($roundPos + $decPos == -1) {
             return str_pad('1', $decPos + 1, '0');
         }
         $roundUp = str_pad('', $length, '0');
         $roundUp[$decPos] = '.';
         $roundUp[$roundPos + $decPos] = '1';
         if ($op1 > 0) {
             if (self::$_bcmathDisabled) {
                 return Zend_Locale_Math_PhpMath::Add($op1, $roundUp, $precision);
             }
             return self::Add($op1, $roundUp, $precision);
         } else {
             if (self::$_bcmathDisabled) {
                 return Zend_Locale_Math_PhpMath::Sub($op1, $roundUp, $precision);
             }
             return self::Sub($op1, $roundUp, $precision);
         }
     } elseif ($precision >= 0) {
         return substr($op1, 0, $decPos + ($precision ? $precision + 1 : 0));
     }
     return (string) $op1;
 }
コード例 #4
0
ファイル: PhpMath.php プロジェクト: jorgenils/zend-framework
 public static function Scale($op1)
 {
     if ($op1 > 9) {
         require_once 'Zend/Locale/Math/Exception.php';
         throw new Zend_Locale_Math_Exception("can not scale to precision $op1", $op1, null, null);
     }
     self::$_scale = $op1;
     return true;
 }
コード例 #5
0
ファイル: Math.php プロジェクト: VUW-SIM-FIS/emiemi
     * BCMod - fixes a problem of BCMath and exponential numbers
     *
     * @param  string  $op1
     * @param  string  $op2
     * @return string
     */
    public static function Mod($op1, $op2)
    {
        $op1 = self::exponent($op1);
        $op2 = self::exponent($op2);
        return bcmod($op1, $op2);
    }
    /**
     * BCComp - fixes a problem of BCMath and exponential numbers
     *
     * @param  string  $op1
     * @param  string  $op2
     * @param  integer $scale
     * @return string
     */
    public static function Comp($op1, $op2, $scale = null)
    {
        $op1 = self::exponent($op1, $scale);
        $op2 = self::exponent($op2, $scale);
        return bccomp($op1, $op2, $scale);
    }
}
if (defined('TESTS_ZEND_LOCALE_BCMATH_ENABLED') && !TESTS_ZEND_LOCALE_BCMATH_ENABLED || !extension_loaded('bcmath')) {
    require_once 'Zend/Locale/Math/PhpMath.php';
    Zend_Locale_Math_PhpMath::disable();
}
コード例 #6
0
ファイル: MathTest.php プロジェクト: ThorstenSuckow/conjoon
 public function testScale()
 {
     Zend_Locale_Math_PhpMath::disable();
     $this->assertTrue(Zend_Locale_Math_PhpMath::Scale(3));
     try {
         $this->assertTrue(Zend_Locale_Math_PhpMath::Scale(10));
         $this->fail("exception expected");
     } catch (Zend_Locale_Math_Exception $e) {
         // success
     }
     $this->assertEquals(1, Zend_Locale_Math_PhpMath::Comp(10.5556, 10.4444));
     $this->assertTrue(Zend_Locale_Math_PhpMath::Scale(0));
     $this->assertEquals(0, Zend_Locale_Math_PhpMath::Comp(10.5556, 10.4444));
 }