📄 fraction.php
字号:
<?php
//
// +----------------------------------------------------------------------+
// | PHP version 4.0 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2001 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Sebastian Bergmann <sb@sebastian-bergmann.de> |
// +----------------------------------------------------------------------+
//
// $Id: Fraction.php,v 1.3.2.3 2001/11/13 01:26:47 ssb Exp $
//
/**
* Math::Math_Fraction
*
* Purpose:
*
* Class for handling fractions.
*
* Example:
*
* $a = new Math_Fraction( 1, 2 );
* $b = new Math_Fraction( 3, 4 );
*
* $a->add( $b );
*
* @author Sebastian Bergmann <sb@sebastian-bergmann.de>
* @version $Revision: 1.3.2.3 $
* @access public
* @package Numbers
*/
require_once 'Math/Util.php';
class Math_Fraction
{
/**
* numerator of the fraction
*
* @var int numerator
* @access public
*/
var $numerator;
/**
* denominator of the fraction
*
* @var int denominator
* @access public
*/
var $denominator;
/**
* Constructor
*
* @param int numerator
* @param int denominator
* @access public
*/
function Math_Fraction($numerator, $denominator = 1)
{
$this->numerator = $numerator;
$this->denominator = $denominator;
}
/**
* Add another fraction to this one.
*
* @param Math_Fraction fraction
* @param boolean overwrite_with_result
* @return Math_Fraction result (if overwrite_with_result == false)
* @access public
* @see sub, mul, div
*/
function add($fraction, $overwrite_with_result = true)
{
$fraction = $this->_check_fraction($fraction);
$result = new Math_Fraction(($this->numerator + $fraction->numerator),
($this->denominator * $fraction->denominator)
);
return $this->_return($result, $overwrite_with_result);
}
/**
* Subtract another fraction from this one.
*
* @param Math_Fraction fraction
* @param boolean overwrite_with_result
* @return Math_Fraction result (if overwrite_with_result == false)
* @access public
* @see add, mul, div
*/
function sub($fraction, $overwrite_with_result = true)
{
$fraction = $this->_check_fraction($fraction);
$result = new Math_Fraction(($this->numerator - $fraction->numerator),
($this->denominator * $fraction->denominator)
);
return $this->_return($result, $overwrite_with_result);
}
/**
* Multiply another fraction with this one.
*
* @param Math_Fraction fraction
* @param boolean overwrite_with_result
* @return Math_Fraction result (if overwrite_with_result == false)
* @access public
* @see add, sub, div
*/
function mul($fraction, $overwrite_with_result = true)
{
$fraction = $this->_check_fraction( $fraction );
$result = new Math_Fraction(($this->numerator * $fraction->numerator),
($this->denominator * $fraction->denominator)
);
return $this->_return($result, $overwrite_with_result);
}
/**
* Divide this fraction by another one.
*
* @param Math_Fraction fraction
* @param boolean overwrite_with_result
* @return Math_Fraction result (if overwrite_with_result == false)
* @access public
* @see add, sub, mul
*/
function div($fraction, $overwrite_with_result = true)
{
$fraction = $this->_check_fraction( $fraction );
$result = new Math_Fraction(($this->numerator * $fraction->denominator),
($this->denominator * $fraction->numerator)
);
return $this->_return($result, $overwrite_with_result);
}
/**
* Normalize this fraction.
*
* @access public
*/
function normalize()
{
$gcd = Math_Util::gcd($this->numerator, $this->denominator);
$this->numerator = $this->numerator / $gcd;
$this->denominator = $this->denominator / $gcd;
}
/**
* Dump this fraction.
*
* @access public
*/
function dump()
{
echo $this->get();
}
/**
* Get string representation of this fraction.
*
* @return string representation of fraction
* @access public
*/
function get()
{
return $this->numerator . ' / ' . $this->denominator;
}
/**
* Check, if a varaible holds a Math_Fraction object.
*
* @param Math_Fraction fraction to be checked
* @return Math_Fraction checked fraction
* @access private
*/
function _check_fraction($fraction)
{
if (get_class($fraction) != 'math_fraction') {
$fraction = new Math_Fraction( $fraction );
}
return $fraction;
}
/**
* Handle the return or storage of a result from add, sub, mul or div.
*
* @param Math_Fraction result
* @param boolean overwrite_with_result
* @return Math_Fraction result (if overwrite_with_result == false)
* @access private
*/
function _return($result, $overwrite_with_result)
{
$result->normalize();
if ($overwrite_with_result) {
$this->numerator = $result->numerator;
$this->denominator = $result->denominator;
} else {
return $result;
}
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -