MDL-27659 "have evalmath accept numbers expressed with scientific
notation"
This commit is contained in:
@@ -212,7 +212,7 @@ class EvalMath {
|
||||
while(1) { // 1 Infinite Loop ;)
|
||||
$op = substr($expr, $index, 1); // get the first character at the current index
|
||||
// find out if we're currently at the beginning of a number/variable/function/parenthesis/operand
|
||||
$ex = preg_match('/^('.self::$namepat.'\(?|\d+(?:\.\d*)?|\.\d+|\()/', substr($expr, $index), $match);
|
||||
$ex = preg_match('/^('.self::$namepat.'\(?|\d+(?:\.\d*)?(?:(e[+-]?)\d*)?|\.\d+|\()/', substr($expr, $index), $match);
|
||||
//===============
|
||||
if ($op == '-' and !$expecting_op) { // is it a negation instead of a minus?
|
||||
$stack->push('_'); // put a negation on the stack
|
||||
|
||||
@@ -194,6 +194,24 @@ class mathsslib_test extends UnitTestCase {
|
||||
|
||||
}
|
||||
|
||||
public function test_scientific_notation() {
|
||||
$formula = new calc_formula('=10e10');
|
||||
$this->assertWithinMargin($formula->evaluate(), 1e11, 1e11*1e-15);
|
||||
|
||||
$formula = new calc_formula('=10e-10');
|
||||
$this->assertWithinMargin($formula->evaluate(), 1e-9, 1e11*1e-15);
|
||||
|
||||
$formula = new calc_formula('=10e+10');
|
||||
$this->assertWithinMargin($formula->evaluate(), 1e11, 1e11*1e-15);
|
||||
|
||||
$formula = new calc_formula('=10e10*5');
|
||||
$this->assertWithinMargin($formula->evaluate(), 5e11, 1e11*1e-15);
|
||||
|
||||
$formula = new calc_formula('=10e10^2');
|
||||
$this->assertWithinMargin($formula->evaluate(), 1e22, 1e22*1e-15);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user