8000 `Now Number::round()` does not remove trailing zeros · php/php-src@1ba3d76 · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1ba3d76

Browse files
committed
Now Number::round() does not remove trailing zeros
1 parent 3e2cfdf commit 1ba3d76

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.4.3
44

5+
- BcMath:
6+
. Fixed bug GH-17061 (Now Number::round() does not remove trailing zeros).
7+
(Saki Takamachi)
8+
59
- Streams:
610
. Fixed bug GH-17037 (UAF in user filter when adding existing filter name due
711
to incorrect error handling). (nielsdos)

ext/bcmath/bcmath.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1801,8 +1801,6 @@ PHP_METHOD(BcMath_Number, round)
18011801
bc_num ret = NULL;
18021802
bc_round(intern->num, precision, rounding_mode, &ret);
18031803

1804-
bc_rm_trailing_zeros(ret);
1805-
18061804
bcmath_number_obj_t *new_intern = bcmath_number_new_obj(ret, ret->n_scale);
18071805
RETURN_OBJ(&new_intern->std);
18081806
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
--TEST--
2+
BcMath\Number round() - has trailing zeros
3+
--EXTENSIONS--
4+
bcmath
5+
--FILE--
6+
<?php
7+
foreach (RoundingMode::cases() as $mode) {
8+
echo "========== {$mode->name} ==========\n";
9+
foreach ([
10+
['0.00', 1],
11+
['0.1', 5],
12+
['-0.300', 5],
13+
['1.995', 2],
14+
] as [$value, $precision]) {
15+
$number = new BcMath\Number($value);
16+
$output = 'value is ';
17+
$output .= str_pad($value, 6, ' ', STR_PAD_RIGHT) . ', ';
18+
$output .= "precision is {$precision}: ";
19+
$output .= $number->round($precision, $mode) . "\n";
20+
echo $output;
21+
}
22+
echo "\n";
23+
}
24+
?>
25+
--EXPECT--
26+
========== HalfAwayFromZero ==========
27+
value is 0.00 , precision is 1: 0.0
28+
value is 0.1 , precision is 5: 0.10000
29+
value is -0.300, precision is 5: -0.30000
30+
value is 1.995 , precision is 2: 2.00
31+
32+
========== HalfTowardsZero ==========
33+
value is 0.00 , precision is 1: 0.0
34+
value is 0.1 , precision is 5: 0.10000
35+
value is -0.300, precision is 5: -0.30000
36+
value is 1.995 , precision is 2: 1.99
37+
38+
========== HalfEven ==========
39+
value is 0.00 , precision is 1: 0.0
40+
value is 0.1 , precision is 5: 0.10000
41+
value is -0.300, precision is 5: -0.30000
42+
value is 1.995 , precision is 2: 2.00
43+
44+
========== HalfOdd ==========
45+
value is 0.00 , precision is 1: 0.0
46+
value is 0.1 , precision is 5: 0.10000
47+
value is -0.300, precision is 5: -0.30000
48+
value is 1.995 , precision is 2: 1.99
49+
50+
========== TowardsZero ==========
51+
value is 0.00 , precision is 1: 0.0
52+
value is 0.1 , p A0D0 recision is 5: 0.10000
53+
value is -0.300, precision is 5: -0.30000
54+
value is 1.995 , precision is 2: 1.99
55+
56+
========== AwayFromZero ==========
57+
value is 0.00 , precision is 1: 0.0
58+
value is 0.1 , precision is 5: 0.10000
59+
value is -0.300, precision is 5: -0.30000
60+
value is 1.995 , precision is 2: 2.00
61+
62+
========== NegativeInfinity ==========
63+
value is 0.00 , precision is 1: 0.0
64+
value is 0.1 , precision is 5: 0.10000
65+
value is -0.300, precision is 5: -0.30000
66+
value is 1.995 , precision is 2: 1.99
67+
68+
========== PositiveInfinity ==========
69+
value is 0.00 , precision is 1: 0.0
70+
value is 0.1 , precision is 5: 0.10000
71+
value is -0.300, precision is 5: -0.30000
72+
value is 1.995 , precision is 2: 2.00

0 commit comments

Comments
 (0)
0