Convert division/multiplication/modulo results after calculation

So that type and value will be identical to PHP's ones.

Bug: T191688
Depends-On: I1140900cdda63eed292d9f20aefd721ef9247fcd
Change-Id: I398c9a972b7e9fcb27d055d23939be2b8bb68244
This commit is contained in:
Daimona Eaytoy 2018-04-07 13:03:41 +02:00
parent be076eb97e
commit 2dda2e381c
2 changed files with 6 additions and 14 deletions

View file

@ -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 );

View file

@ -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)