8000 [Form] Improve rounding precision · teohhanhui/symfony@e50804c · GitHub
[go: up one dir, main page]

Skip to content

Commit e50804c

Browse files
foaly-nr1fabpot
authored andcommitted
[Form] Improve rounding precision
1 parent a786b5a commit e50804c

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

src/Symfony/Component/Form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,8 @@ private function round($number)
266266
if (null !== $this->precision && null !== $this->roundingMode) {
267267
// shift number to maintain the correct scale during rounding
268268
$roundingCoef = pow(10, $this->precision);
269-
$number *= $roundingCoef;
269+
// string representation to avoid rounding errors, similar to bcmul()
270+
$number = (string) ($number * $roundingCoef);
270271

271272
switch ($this->roundingMode) {
272273
case self::ROUND_CEILING:

src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/NumberToLocalizedStringTransformerTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,8 @@ public function reverseTransformWithRoundingProvider()
307307
array(1, '123,44', 123.4, NumberToLocalizedStringTransformer::ROUND_DOWN),
308308
array(1, '-123,45', -123.4, NumberToLocalizedStringTransformer::ROUND_DOWN),
309309
array(1, '-123,44', -123.4, NumberToLocalizedStringTransformer::ROUND_DOWN),
310+
array(2, '37.37', 37.37, Nu 4EEC mberToLocalizedStringTransformer::ROUND_DOWN),
311+
array(2, '2.01', 2.01, NumberToLocalizedStringTransformer::ROUND_DOWN),
310312
// round halves (.5) to the next even number
311313
array(0, '1234,6', 1235, NumberToLocalizedStringTransformer::ROUND_HALF_EVEN),
312314
array(0, '1234,5', 1234, NumberToLocalizedStringTransformer::ROUND_HALF_EVEN),

0 commit comments

Comments
 (0)
0