From 946741c3122e1975aabd6baea7ac7d3a43dfb956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Konvi=C4=8Dka?= Date: Thu, 30 Jan 2025 00:57:47 +0100 Subject: [PATCH] Replace number_format to handle large numbers and overflow --- src/Column/ColumnNumber.php | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Column/ColumnNumber.php b/src/Column/ColumnNumber.php index 64e6ff08..2d2aa953 100644 --- a/src/Column/ColumnNumber.php +++ b/src/Column/ColumnNumber.php @@ -23,12 +23,31 @@ public function getColumnValue(Row $row): mixed return $value; } - return number_format( - (float) $value, - (int) $this->numberFormat[0], - (string) $this->numberFormat[1], - (string) $this->numberFormat[2] - ); + $decimal = null; + $value = (string) $value; + + if (str_contains($value, '.')) { + list($integer, $decimal) = explode('.', $value, 2); + } + else { + $integer = $value; + } + + if ($this->numberFormat[0] > 0) { + $decimal = substr( + $decimal . str_repeat('0', $this->numberFormat[0]), + 0, + $this->numberFormat[0] + ); + } + + $integer = preg_replace('/\B(?=(\d{3})+(?!\d))/', $this->numberFormat[2], $integer); + + if ($decimal > 0) { + return $integer . $this->numberFormat[1] . $decimal; + } + + return $integer; } /**