Fix ROUNDUP and ROUNDDOWN for floating-point rounding error (#1404)
Closes #1404
This commit is contained in:
parent
a08415a7b5
commit
a79b344d53
|
@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
|
|||
- Fix active cell when freeze pane is used [#1323](https://github.com/PHPOffice/PhpSpreadsheet/pull/1323)
|
||||
- Fix XLSX file loading with autofilter containing '$' [#1326](https://github.com/PHPOffice/PhpSpreadsheet/pull/1326)
|
||||
- PHPDoc - Use `@return $this` for fluent methods [#1362](https://github.com/PHPOffice/PhpSpreadsheet/pull/1362)
|
||||
- Fix ROUNDUP and ROUNDDOWN for floating-point rounding error [#1404](https://github.com/PHPOffice/PhpSpreadsheet/pull/1404)
|
||||
|
||||
## [1.10.1] - 2019-12-02
|
||||
|
||||
|
|
|
@ -1064,12 +1064,13 @@ class MathTrig
|
|||
$digits = Functions::flattenSingleValue($digits);
|
||||
|
||||
if ((is_numeric($number)) && (is_numeric($digits))) {
|
||||
$significance = pow(10, (int) $digits);
|
||||
if ($number < 0.0) {
|
||||
$significance = pow(10, (int) $digits);
|
||||
|
||||
return floor($number * $significance) / $significance;
|
||||
}
|
||||
|
||||
return ceil($number * $significance) / $significance;
|
||||
return round($number + 0.5 * pow(0.1, $digits), $digits, PHP_ROUND_HALF_DOWN);
|
||||
}
|
||||
|
||||
return Functions::VALUE();
|
||||
|
@ -1091,12 +1092,13 @@ class MathTrig
|
|||
$digits = Functions::flattenSingleValue($digits);
|
||||
|
||||
if ((is_numeric($number)) && (is_numeric($digits))) {
|
||||
$significance = pow(10, (int) $digits);
|
||||
if ($number < 0.0) {
|
||||
$significance = pow(10, (int) $digits);
|
||||
|
||||
return ceil($number * $significance) / $significance;
|
||||
}
|
||||
|
||||
return floor($number * $significance) / $significance;
|
||||
return round($number - 0.5 * pow(0.1, $digits), $digits, PHP_ROUND_HALF_UP);
|
||||
}
|
||||
|
||||
return Functions::VALUE();
|
||||
|
|
|
@ -61,6 +61,16 @@ return [
|
|||
31415.92654,
|
||||
-1,
|
||||
],
|
||||
[
|
||||
4.44,
|
||||
4.4400,
|
||||
2,
|
||||
],
|
||||
[
|
||||
5.20,
|
||||
2.26 + 2.94,
|
||||
2,
|
||||
],
|
||||
[
|
||||
'#VALUE!',
|
||||
'ABC',
|
||||
|
|
|
@ -61,6 +61,16 @@ return [
|
|||
31415.92654,
|
||||
-1,
|
||||
],
|
||||
[
|
||||
4.44,
|
||||
4.4400,
|
||||
2,
|
||||
],
|
||||
[
|
||||
5.20,
|
||||
2.26 + 2.94,
|
||||
2,
|
||||
],
|
||||
[
|
||||
'#VALUE!',
|
||||
'ABC',
|
||||
|
|
Loading…
Reference in New Issue