Skip to content

Commit 13a87ac

Browse files
marwinsm.sorce
andauthored
Fix multiplication and division by a float precision (#127)
* Fix multiplication and division by a float precision * Fix tests + Add ones concerning issue Co-authored-by: m.sorce <[email protected]>
1 parent 2bacfb2 commit 13a87ac

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

src/Money.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public function divide($divisor, $roundingMode = \Money\Money::ROUND_HALF_UP)
103103
$money = $this->getMoney();
104104
$calculator = static::resolveCalculator();
105105

106-
return new self((int) $calculator->divide($money->getAmount(), $divisor), $money->getCurrency());
106+
return new self((int) round($calculator->divide($money->getAmount(), $divisor), 0, $roundingMode), $money->getCurrency());
107107
}
108108

109109
/**
@@ -125,7 +125,7 @@ public function multiply($multiplier, $roundingMode = \Money\Money::ROUND_HALF_U
125125
$money = $this->getMoney();
126126
$calculator = static::resolveCalculator();
127127

128-
return new self((int) $calculator->multiply($money->getAmount(), $multiplier), $money->getCurrency());
128+
return new self((int) round($calculator->multiply($money->getAmount(), $multiplier), 0, $roundingMode), $money->getCurrency());
129129
}
130130

131131
/**

tests/MoneyTest.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,10 @@ public function testMultiply()
8686
static::assertEquals(Money::USD(275), Money::USD(5.5)->multiply(0.5));
8787
static::assertEquals(Money::USD(1100), Money::USD(5.5)->multiply(2));
8888
static::assertEquals(Money::USD(10), Money::USD(5)->multiply(2));
89-
static::assertEquals(Money::USD(101), Money::USD(35)->multiply(2.9));
89+
static::assertEquals(Money::USD(102), Money::USD(35)->multiply(2.9));
9090
static::assertEquals(Money::USD(10150), Money::USD(35, true)->multiply(2.9));
9191
static::assertEquals(Money::USD(11550), Money::USD(35, true)->multiply(3.3));
92+
static::assertEquals(Money::USD(3317), Money::USD(199, true)->multiply(0.16666667));
9293
}
9394

9495
public function testDivide()
@@ -97,8 +98,9 @@ public function testDivide()
9798
static::assertEquals(Money::USD(1010), Money::USD(20.20)->divide(2));
9899
static::assertEquals(Money::USD(10), Money::USD(20)->divide(2));
99100
static::assertEquals(Money::USD(0.12), Money::USD(35)->divide(2.9));
100-
static::assertEquals(Money::USD(12.06), Money::USD(35, true)->divide(2.9));
101-
static::assertEquals(Money::USD(10.60), Money::USD(35, true)->divide(3.3));
101+
static::assertEquals(Money::USD(12.07), Money::USD(35, true)->divide(2.9));
102+
static::assertEquals(Money::USD(10.61), Money::USD(35, true)->divide(3.3));
103+
static::assertEquals(Money::USD(86.52), Money::USD(199, true)->divide(2.3));
102104
}
103105

104106
public function testMod()

0 commit comments

Comments
 (0)