diff --git a/includes/parser/AFPData.php b/includes/parser/AFPData.php index a14d56689..16ef212be 100644 --- a/includes/parser/AFPData.php +++ b/includes/parser/AFPData.php @@ -357,18 +357,8 @@ class AFPData { * @throws AFPException */ public static function mulRel( $a, $b, $op, $pos ) { - // Figure out the type. - if ( $a->type == self::DFLOAT || $b->type == self::DFLOAT || - $a->toFloat() != $a->toString() || $b->toFloat() != $b->toString() - ) { - $type = self::DFLOAT; - $a = $a->toFloat(); - $b = $b->toFloat(); - } else { - $type = self::DINT; - $a = $a->toInt(); - $b = $b->toInt(); - } + $a = $a->toNumber(); + $b = $b->toNumber(); if ( $op != '*' && $b == 0 ) { throw new AFPUserVisibleException( 'dividebyzero', $pos, [ $a ] ); @@ -385,10 +375,12 @@ class AFPData { throw new AFPException( "Invalid multiplication-related operation: {$op}" ); } - if ( $type == self::DINT ) { + if ( $data === (int)$data ) { $data = intval( $data ); + $type = self::DINT; } else { $data = floatval( $data ); + $type = self::DFLOAT; } return new AFPData( $type, $data ); diff --git a/tests/parserTests/float.t b/tests/parserTests/float.t index 9ce8c9194..792f19d65 100644 --- a/tests/parserTests/float.t +++ b/tests/parserTests/float.t @@ -1 +1 @@ -(5 / 2 = 2) & (5. / 2 = 2.5) & (5 / 2. = 2.5) & (int(.5) = 0) +(5 / 2 = 2.5) & (5. / 2 = 2.5) & (5 / 2. = 2.5) & (int(.5) = 0)