nfTlWNl rn Ѻq$³*%yNk9Sx*9ԏ$,_NgY?w:/}`AѠOFl1ʫ`Xb T5rxnIK[7Ҩ<2UJ3Iz2E;F^΢TdNP=t}ƙeUWQَ-(0Yc  IRAz;.RlU<.,ӪcB]oi(3'FM,kRT_bn_ၿod/ =Q3Rap#G&"'h64Q$6;M&Wᖻe.pO )_A[:m#[<8&ༀם(Q5&dEQMM_^MR;]"C+%YnTA= aa̬BN̵oB.Z]ȅ*Wط8{gGEzAbg^Z=lWX@>>i.? r:0H (~tFP^H< ĢQ$3L:[$Fec$ B2h]#J0wӤiNj@Ȕ璊#7<3EW4YfZ"dAhwD!=; d%?AFݣ \FO*NWdԾFWqRRε/*#3mFox<B]Iuv;I˕PQo$&H1ܛ E//9@|Q94p!>Q KInOz\Zw}r!VUn Pw83jw`y?Yժm/ݘ9hXVS6#$Bl'ؿb3(梼,/1 $шY(MmqSm~t.лz Rm9]]co=r}yO:x(V4ze1ldpAϝ_Qpc'sofh}Y[GK'ٱ4o nim6FŁ9Ks2Á8몸>V~'Z aT$Ĺb{NVYrSD*yNKɨ\G߾nnG;Es!vP-\#ĉb }]责YR%/Vxspfݶ~UsAf;fRhʇ6fch\cxC Q8rT' ޚXL_* ќ%ҷS1OS*w$%OXhP \ÁBibU(n.DL_U<*oQps5b9& gwɩtDwe3c$0ժnk`#y~! Lf;mgS#ͪVu1.jI4CZE&,A Dŧ2z{2v ÙAWNs 9r+hA*wH̔Gi] A5]:(L`~$O`6~!0,Z!j'V"ptHVO}iU[?QlD&`u^|H:v,w6:D;OO7Qw@"ϏJu\.wvsӫOƉczF7ʁ-~f -xtW ĢQ$3dzq_BT[odMGjE]״NdY hu @$_`,SjJL;]"C+%YnTA= aa̬BN̵oB.Z]ȅ*Wط8{Nb`mg2[dHh x7Ujl=1E Jz"~?RᵢQ3!H ĢQ$3eMx%P]bAϴEZDQq*7&)7;/_/W C_L1e!c硜D'͔iQyk[rv#wqL"OB Ggt'ξp%?\R=>Ve*w4'Cy=bG,kPv}h0!$5sn >,笧kJ߇QI"֮m 5F |ndq '؄ݐ;f絇F8#oMka<^cSƙ[)7s39嬢.QW)n(.3?Yժm/ݘ9z36 /# K!=̈Ç!q+g 1$-S$O^zZ 5]af*ڃsu $ E%m!wv>-|g0uB~j@R\psՐi>Wy)%0Q 7)z]/{J &f%ӁM^Q=ncbzm%IՆb2{MBZj`t}Lx}YsIwY8`XGصĨC4^"P ?!Hy{ѐ$ajNMyD;tۉ1'nîO;B'pIm4*-W0fV"mҐ^fghkk@t%3-1+P.<pˤ&o%yuTf5zApMtp@VG&FSmO!~^fDkkx Ӎ8iB#] "֮}$k{C[<~ X!ĒHhI@,Lm ))!_ pjOkHiN>ލsX]–4XT ON"A~ )DqQ#nvBgAyҰ; 7Ȑ?+tPQ8F̨dh򀱫9>f&3 I]C63 with the same dimensions */ public static function precise($number, $significance = 1) { if (is_array($number) || is_array($significance)) { return self::evaluateArrayArguments([self::class, __FUNCTION__], $number, $significance); } try { $number = Helpers::validateNumericNullBool($number); $significance = Helpers::validateNumericNullSubstitution($significance, null); } catch (Exception $e) { return $e->getMessage(); } return self::argumentsOkPrecise((float) $number, (float) $significance); } /** * Avoid Scrutinizer problems concerning complexity. * * @return float|string */ private static function argumentsOkPrecise(float $number, float $significance) { if ($significance == 0.0) { return ExcelError::DIV0(); } if ($number == 0.0) { return 0.0; } return floor($number / abs($significance)) * abs($significance); } /** * Avoid Scrutinizer complexity problems. * * @return float|string Rounded Number, or a string containing an error */ private static function argsOk(float $number, float $significance, int $mode) { if (!$significance) { return ExcelError::DIV0(); } if (!$number) { return 0.0; } if (self::floorMathTest($number, $significance, $mode)) { return ceil($number / $significance) * $significance; } return floor($number / $significance) * $significance; } /** * Let FLOORMATH complexity pass Scrutinizer. */ private static function floorMathTest(float $number, float $significance, int $mode): bool { return Helpers::returnSign($significance) == -1 || (Helpers::returnSign($number) == -1 && !empty($mode)); } /** * Avoid Scrutinizer problems concerning complexity. * * @return float|string */ private static function argumentsOk(float $number, float $significance) { if ($significance == 0.0) { return ExcelError::DIV0(); } if ($number == 0.0) { return 0.0; } if (Helpers::returnSign($significance) == 1) { return floor($number / $significance) * $significance; } if (Helpers::returnSign($number) == -1 && Helpers::returnSign($significance) == -1) { return floor($number / $significance) * $significance; } return ExcelError::NAN(); } }