33
33
class ExponentialNumberTransformer extends NumberToLocalizedStringTransformer
34
34
{
35
35
public function __construct (
36
- protected ?int $ scale = null ,
36
+ private ?int $ scale = null ,
37
37
?bool $ grouping = false ,
38
38
?int $ roundingMode = \NumberFormatter::ROUND_HALFUP ,
39
39
protected ?string $ locale = null
40
40
) {
41
+ //Set scale to null, to disable rounding of values
41
42
parent ::__construct ($ scale , $ grouping , $ roundingMode , $ locale );
42
43
}
43
44
@@ -85,12 +86,28 @@ protected function getScientificNumberFormatter(): \NumberFormatter
85
86
$ formatter = new \NumberFormatter ($ this ->locale ?? \Locale::getDefault (), \NumberFormatter::SCIENTIFIC );
86
87
87
88
if (null !== $ this ->scale ) {
88
- $ formatter ->setAttribute (\NumberFormatter::FRACTION_DIGITS , $ this ->scale );
89
+ $ formatter ->setAttribute (\NumberFormatter::MAX_FRACTION_DIGITS , $ this ->scale );
89
90
$ formatter ->setAttribute (\NumberFormatter::ROUNDING_MODE , $ this ->roundingMode );
90
91
}
91
92
92
93
$ formatter ->setAttribute (\NumberFormatter::GROUPING_USED , (int ) $ this ->grouping );
93
94
95
+ return $ formatter ;
96
+ }
97
+
98
+ protected function getNumberFormatter (): \NumberFormatter
99
+ {
100
+ $ formatter = parent ::getNumberFormatter ();
101
+
102
+ //Unset the fraction digits, as we don't want to round the number
103
+ $ formatter ->setAttribute (\NumberFormatter::FRACTION_DIGITS , 0 );
104
+ if (null !== $ this ->scale ) {
105
+ $ formatter ->setAttribute (\NumberFormatter::MAX_FRACTION_DIGITS , $ this ->scale );
106
+ } else {
107
+ $ formatter ->setAttribute (\NumberFormatter::MAX_FRACTION_DIGITS , 100 );
108
+ }
109
+
110
+
94
111
return $ formatter ;
95
112
}
96
113
}
0 commit comments