@@ -24,10 +24,8 @@ final class Calculator
2424 *
2525 * @return string The result.
2626 */
27- public static function add ($ first_number , $ second_number , $ scale = 6 )
27+ public static function add (string $ first_number , string $ second_number , int $ scale = 6 ): string
2828 {
29- self ::assertNumberFormat ($ first_number );
30- self ::assertNumberFormat ($ second_number );
3129 $ result = bcadd ($ first_number , $ second_number , $ scale );
3230
3331 return self ::trim ($ result );
@@ -44,10 +42,8 @@ public static function add($first_number, $second_number, $scale = 6)
4442 *
4543 * @return string The result.
4644 */
47- public static function subtract ($ first_number , $ second_number , $ scale = 6 )
45+ public static function subtract (string $ first_number , string $ second_number , int $ scale = 6 ): string
4846 {
49- self ::assertNumberFormat ($ first_number );
50- self ::assertNumberFormat ($ second_number );
5147 $ result = bcsub ($ first_number , $ second_number , $ scale );
5248
5349 return self ::trim ($ result );
@@ -64,10 +60,8 @@ public static function subtract($first_number, $second_number, $scale = 6)
6460 *
6561 * @return string The result.
6662 */
67- public static function multiply ($ first_number , $ second_number , $ scale = 6 )
63+ public static function multiply (string $ first_number , string $ second_number , int $ scale = 6 ): string
6864 {
69- self ::assertNumberFormat ($ first_number );
70- self ::assertNumberFormat ($ second_number );
7165 $ result = bcmul ($ first_number , $ second_number , $ scale );
7266
7367 return self ::trim ($ result );
@@ -84,10 +78,8 @@ public static function multiply($first_number, $second_number, $scale = 6)
8478 *
8579 * @return string The result.
8680 */
87- public static function divide ($ first_number , $ second_number , $ scale = 6 )
81+ public static function divide (string $ first_number , string $ second_number , int $ scale = 6 ): string
8882 {
89- self ::assertNumberFormat ($ first_number );
90- self ::assertNumberFormat ($ second_number );
9183 $ result = bcdiv ($ first_number , $ second_number , $ scale );
9284
9385 return self ::trim ($ result );
@@ -100,7 +92,7 @@ public static function divide($first_number, $second_number, $scale = 6)
10092 *
10193 * @return string The result.
10294 */
103- public static function ceil ($ number )
95+ public static function ceil (string $ number ): string
10496 {
10597 if (self ::compare ($ number , 0 ) == 1 ) {
10698 $ result = bcadd ($ number , '1 ' , 0 );
@@ -118,7 +110,7 @@ public static function ceil($number)
118110 *
119111 * @return string The result.
120112 */
121- public static function floor ($ number )
113+ public static function floor (string $ number ): string
122114 {
123115 if (self ::compare ($ number , 0 ) == 1 ) {
124116 $ result = bcadd ($ number , '0 ' , 0 );
@@ -145,9 +137,8 @@ public static function floor($number)
145137 *
146138 * @throws \InvalidArgumentException
147139 */
148- public static function round ($ number , $ precision = 0 , $ mode = PHP_ROUND_HALF_UP )
140+ public static function round (string $ number , int $ precision = 0 , int $ mode = PHP_ROUND_HALF_UP ): string
149141 {
150- self ::assertNumberFormat ($ number );
151142 if (!is_numeric ($ precision ) || $ precision < 0 ) {
152143 throw new \InvalidArgumentException ('The provided precision should be a positive number ' );
153144 }
@@ -197,11 +188,8 @@ public static function round($number, $precision = 0, $mode = PHP_ROUND_HALF_UP)
197188 * @return int 0 if both numbers are equal, 1 if the first one is greater,
198189 * -1 otherwise.
199190 */
200- public static function compare ($ first_number , $ second_number , $ scale = 6 )
191+ public static function compare (string $ first_number , string $ second_number , int $ scale = 6 ): int
201192 {
202- self ::assertNumberFormat ($ first_number );
203- self ::assertNumberFormat ($ second_number );
204-
205193 return bccomp ($ first_number , $ second_number , $ scale );
206194 }
207195
@@ -216,7 +204,7 @@ public static function compare($first_number, $second_number, $scale = 6)
216204 *
217205 * @return string The trimmed number.
218206 */
219- public static function trim ($ number )
207+ public static function trim (string $ number ): string
220208 {
221209 if (strpos ($ number , '. ' ) != false ) {
222210 // The number is decimal, strip trailing zeroes.
@@ -228,20 +216,4 @@ public static function trim($number)
228216 return $ number ;
229217 }
230218
231- /**
232- * Assert that the given number is a numeric string value.
233- *
234- * @param string $number The number to check.
235- *
236- * @throws \InvalidArgumentException
237- */
238- public static function assertNumberFormat ($ number )
239- {
240- if (is_float ($ number )) {
241- throw new \InvalidArgumentException (sprintf ('The provided value "%s" must be a string, not a float. ' , $ number ));
242- }
243- if (!is_numeric ($ number )) {
244- throw new \InvalidArgumentException (sprintf ('The provided value "%s" is not a numeric value. ' , $ number ));
245- }
246- }
247219}
0 commit comments