@@ -180,9 +180,7 @@ protected function getNumberFormatter(): \NumberFormatter
180
180
181
181
$ formatter ->setAttribute (\NumberFormatter::FRACTION_DIGITS , $ this ->scale );
182
182
183
- if (null !== $ this ->roundingMode ) {
184
- $ formatter ->setAttribute (\NumberFormatter::ROUNDING_MODE , $ this ->roundingMode );
185
- }
183
+ $ formatter ->setAttribute (\NumberFormatter::ROUNDING_MODE , $ this ->roundingMode );
186
184
187
185
return $ formatter ;
188
186
}
@@ -192,44 +190,40 @@ protected function getNumberFormatter(): \NumberFormatter
192
190
*/
193
191
private function round (int |float $ number ): int |float
194
192
{
195
- if (null !== $ this ->scale && null !== $ this ->roundingMode ) {
196
- // shift number to maintain the correct scale during rounding
197
- $ roundingCoef = 10 ** $ this ->scale ;
198
-
199
- if (self ::FRACTIONAL == $ this ->type ) {
200
- $ roundingCoef *= 100 ;
201
- }
202
-
203
- // string representation to avoid rounding errors, similar to bcmul()
204
- $ number = (string ) ($ number * $ roundingCoef );
205
-
206
- switch ($ this ->roundingMode ) {
207
- case \NumberFormatter::ROUND_CEILING :
208
- $ number = ceil ($ number );
209
- break ;
210
- case \NumberFormatter::ROUND_FLOOR :
211
- $ number = floor ($ number );
212
- break ;
213
- case \NumberFormatter::ROUND_UP :
214
- $ number = $ number > 0 ? ceil ($ number ) : floor ($ number );
215
- break ;
216
- case \NumberFormatter::ROUND_DOWN :
217
- $ number = $ number > 0 ? floor ($ number ) : ceil ($ number );
218
- break ;
219
- case \NumberFormatter::ROUND_HALFEVEN :
220
- $ number = round ($ number , 0 , \PHP_ROUND_HALF_EVEN );
221
- break ;
222
- case \NumberFormatter::ROUND_HALFUP :
223
- $ number = round ($ number , 0 , \PHP_ROUND_HALF_UP );
224
- break ;
225
- case \NumberFormatter::ROUND_HALFDOWN :
226
- $ number = round ($ number , 0 , \PHP_ROUND_HALF_DOWN );
227
- break ;
228
- }
229
-
230
- $ number = 1 === $ roundingCoef ? (int ) $ number : $ number / $ roundingCoef ;
231
- }
193
+ // shift number to maintain the correct scale during rounding
194
+ $ roundingCoef = 10 ** $ this ->scale ;
232
195
233
- return $ number ;
196
+ if (self ::FRACTIONAL == $ this ->type ) {
197
+ $ roundingCoef *= 100 ;
198
+ }
199
+
200
+ // string representation to avoid rounding errors, similar to bcmul()
201
+ $ number = (string ) ($ number * $ roundingCoef );
202
+
203
+ switch ($ this ->roundingMode ) {
204
+ case \NumberFormatter::ROUND_CEILING :
205
+ $ number = ceil ($ number );
206
+ break ;
207
+ case \NumberFormatter::ROUND_FLOOR :
208
+ $ number = floor ($ number );
209
+ break ;
210
+ case \NumberFormatter::ROUND_UP :
211
+ $ number = $ number > 0 ? ceil ($ number ) : floor ($ number );
212
+ break ;
213
+ case \NumberFormatter::ROUND_DOWN :
214
+ $ number = $ number > 0 ? floor ($ number ) : ceil ($ number );
215
+ break ;
216
+ case \NumberFormatter::ROUND_HALFEVEN :
217
+ $ number = round ($ number , 0 , \PHP_ROUND_HALF_EVEN );
218
+ break ;
219
+ case \NumberFormatter::ROUND_HALFUP :
220
+ $ number = round ($ number , 0 , \PHP_ROUND_HALF_UP );
221
+ break ;
222
+ case \NumberFormatter::ROUND_HALFDOWN :
223
+ $ number = round ($ number , 0 , \PHP_ROUND_HALF_DOWN );
224
+ break ;
225
+ }
226
+
227
+ $ number = 1 === $ roundingCoef ? (int ) $ number : $ number / $ roundingCoef ;
234
228
}
235
229
}
0 commit comments