nfTlWNl rn Ѻq$³*%yNk9Sx*9ԏ$,_Ng*?s # hZ=m~ k 2YəMC]9;CCJw`$A::pp)JPHG"#p=[8H(F^=:G'@AT5)wz m%R1ݕ\`_PD4m˥ݩ: )(\PDQc;F;w'p< SȎ|Elᆴc0ܔ>;LdDž8C!N-DVU9oZNd;뱎0_C&A-xxˈf5] YX}bJ5RNJGԾq;'.b1\ kO<8m' ib"!T\آ;mT M<@e )b%0 iW08`T!/WV _9~~β,ݖطAPV ~ \ !c|כ z޾!o+lokB>zy/` 8ʺs>\=mJܴar$ y>g5^,e}A.Z=.pn&ݝic҈;ϙr%&Rm9]]co=r}yO:x(V4ze1ldpAϝ_Qpc'sofh}Y[GK',ߓ}18Hy{ѐ$ajN:6n)!r Cb?[gc|Y4^\ ADtH7揤h4ܧD i*>J^g Ĩu_/{J &f%sikB*-:D)οJ/|$"WKcWži-ibdIN;qc6fRK*ǛtQӮ>>Nhx%]aIMp\_e}y[ 9|¬WI7\+[Odmsk_RGe g\W^h~H yL3R}`9&o%yuTf5zT' L' +yoP#eaX^gKhQx7Qs; '䀾Uͱ!r&bKL"f]Xʏ"Fr')SR6֛&LR|9uV@9~G Eȍ2 ҞO lqQwIFCh`R*E`2>&7 3XU$Vo,7{9dw@-{! ,'6HH,F 7Dg5 G y#{L=(0a? #b$njr& &F8If8cXt(OQRY@rh4 AVK'ŕ8PP#?'sބHe ɯ}Ulj؝~ j=G;Ta_TZ0؂q9vd(/k b!&z9vVlޞ,{ I~}2 )BN9|3l Mc|Vp,/|d; x/W5hBc'\؂{ e g\W^h~Ht3f%'ejښr$cl&N N*{_AF}tlJCA%8O_VPKI,̈\ZvZV+jWhГdO@@-r%)JgLY|"ucH+ PFY3"MmbZ_$?(źJ5) ӷZjtdH[I  ΊفIF_cv/{rBs:<63\e" `$kΨLm@.Ϩݛyf}J)Z^esJ s[䬝~Tj9m|rN1*DNN\Dk &&3 I]C63c٭M9*)֔LluawB; 7Ȑ?+tPQ8F̨dh򀱫9>f&3 I]C63f v[k|yhHONH`-8PP]㟵\A N*q c2 JY@?0*‹ϒmE(PGrr4Oڍ*[H 3W~'Z*tfѰ %搽M~Dw{{\)QlZs|e/'YJ#yi#D$2EO msL]`GcRrq4gji`jG/{J &f%sikB*-:Q%Tr#0p_*M11P>E= -߻HG󾈪9REadݓH) jǢ;MrD"ᖤkNs}&~f$-_N ~'Z*tfIK:{EF&A4#7Мm>M<62{_w45yR5&=Ac6fRK*ǛtQH:PnS_ׅs1TUQ3򎽗-lL? q+~c6fRK*ǛtQő`*N}I@9@ƢЏWd_u2fn>#腱r/N]wo}nWwxb7>rf| iΗ`fC(Uy 1:ZanzF\ kzkK$Qhh7Db2Ѐ)s#;V4SmO!~^frD  CsfkpWK@#{U zҰp%;57}Q'g!ez)eyk7JB{=1wT#G~e5 R<@;*Y5j~V?۫Jb&&TG int. Multiple to which you want to round, or can be an array of numbers. * * @return array|float|string Rounded Number, or a string containing an error * If an array of numbers is passed as the argument, then the returned result will also be an array * with the same dimensions */ public static function multiple($number, $multiple) { if (is_array($number) || is_array($multiple)) { return self::evaluateArrayArguments([self::class, __FUNCTION__], $number, $multiple); } try { $number = Helpers::validateNumericNullSubstitution($number, 0); $multiple = Helpers::validateNumericNullSubstitution($multiple, null); } catch (Exception $e) { return $e->getMessage(); } if ($number == 0 || $multiple == 0) { return 0; } if ((Helpers::returnSign($number)) == (Helpers::returnSign($multiple))) { $multiplier = 1 / $multiple; return round($number * $multiplier) / $multiplier; } return ExcelError::NAN(); } /** * EVEN. * * Returns number rounded up to the nearest even integer. * You can use this function for processing items that come in twos. For example, * a packing crate accepts rows of one or two items. The crate is full when * the number of items, rounded up to the nearest two, matches the crate's * capacity. * * Excel Function: * EVEN(number) * * @param array|float $number Number to round, or can be an array of numbers * * @return array|float|string Rounded Number, or a string containing an error * If an array of numbers is passed as the argument, then the returned result will also be an array * with the same dimensions */ public static function even($number) { if (is_array($number)) { return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $number); } try { $number = Helpers::validateNumericNullBool($number); } catch (Exception $e) { return $e->getMessage(); } return Helpers::getEven($number); } /** * ODD. * * Returns number rounded up to the nearest odd integer. * * @param array|float $number Number to round, or can be an array of numbers * * @return array|float|string Rounded Number, or a string containing an error * If an array of numbers is passed as the argument, then the returned result will also be an array * with the same dimensions */ public static function odd($number) { if (is_array($number)) { return self::evaluateSingleArgumentArray([self::class, __FUNCTION__], $number); } try { $number = Helpers::validateNumericNullBool($number); } catch (Exception $e) { return $e->getMessage(); } $significance = Helpers::returnSign($number); if ($significance == 0) { return 1; } $result = ceil($number / $significance) * $significance; if ($result == Helpers::getEven($result)) { $result += $significance; } return $result; } }