Skip to content

Commit 7128277

Browse files
committed
Updated isMultipleOf helper
1 parent a3be216 commit 7128277

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

src/Helper.php

+12-10
Original file line numberDiff line numberDiff line change
@@ -259,26 +259,29 @@ public static function equals($a, $b): bool
259259
*/
260260
public static function isMultipleOf($number, $divisor, ?int $scale = null): bool
261261
{
262-
if ($number == $divisor) {
262+
if (!$number || $number == $divisor) {
263263
return true;
264264
}
265265

266266
if ($divisor == 0) {
267267
return $number == 0;
268268
}
269269

270-
if ($divisor == 1 && !is_string($number)) {
271-
return is_int($number) || !fmod($number, 1);
272-
}
273-
274270
// maybe we get lucky
275271
if (!fmod($number, $divisor)) {
276272
return true;
277273
}
278274

279-
// int mod
280-
if (is_int($number) && is_int($divisor)) {
281-
return !($number % $divisor);
275+
$divisor = abs($divisor);
276+
if ($divisor == 1) {
277+
// should have been caught by the above fmod()
278+
return false;
279+
}
280+
281+
$number = abs($number);
282+
if ($divisor > $number) {
283+
// number / divisor < 1
284+
return false;
282285
}
283286

284287
// Use global scale if null
@@ -289,8 +292,7 @@ public static function isMultipleOf($number, $divisor, ?int $scale = null): bool
289292
!(self::$hasBCMath ??= extension_loaded('bcmath'))
290293
) {
291294
// use an approximation
292-
$div = $number / $divisor;
293-
return abs($div - round($div)) < (10 ** -$scale);
295+
return abs($number - round($number / $divisor) * $divisor) < (10 ** -$scale);
294296
}
295297

296298
// use bcmath

0 commit comments

Comments
 (0)