Skip to content

Commit 70ac8ee

Browse files
committed
添加传统四舍五入实现
1 parent 4fcaa8f commit 70ac8ee

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/sfnttools/utils/math.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import math
2+
3+
4+
def round_half_up(value: int | float, n_digits: int = 0) -> int | float:
5+
positive = value >= 0
6+
shift = 10 ** n_digits
7+
value = math.floor(abs(value * shift) + 0.5) / shift
8+
if not positive:
9+
value *= -1
10+
if n_digits == 0:
11+
value = int(value)
12+
return value

tests/utils/test_math.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from sfnttools.utils.math import round_half_up
2+
3+
4+
def test_round_half_up():
5+
assert round_half_up(1.4) == 1
6+
assert round_half_up(1.5) == 2
7+
assert round_half_up(1.6) == 2
8+
assert round_half_up(2.4) == 2
9+
assert round_half_up(2.5) == 3
10+
assert round_half_up(2.6) == 3
11+
assert round_half_up(3.4) == 3
12+
assert round_half_up(3.5) == 4
13+
assert round_half_up(3.6) == 4
14+
assert round_half_up(4.4) == 4
15+
assert round_half_up(4.5) == 5
16+
assert round_half_up(4.6) == 5
17+
18+
assert round_half_up(-1.4) == -1
19+
assert round_half_up(-1.5) == -2
20+
assert round_half_up(-1.6) == -2
21+
assert round_half_up(-2.4) == -2
22+
assert round_half_up(-2.5) == -3
23+
assert round_half_up(-2.6) == -3
24+
assert round_half_up(-3.4) == -3
25+
assert round_half_up(-3.5) == -4
26+
assert round_half_up(-3.6) == -4
27+
assert round_half_up(-4.4) == -4
28+
assert round_half_up(-4.5) == -5
29+
assert round_half_up(-4.6) == -5
30+
31+
assert round_half_up(1.2445, 2) == 1.24
32+
assert round_half_up(1.2455, 2) == 1.25
33+
assert round_half_up(1.2465, 2) == 1.25
34+
35+
assert round_half_up(-1.2445, 2) == -1.24
36+
assert round_half_up(-1.2455, 2) == -1.25
37+
assert round_half_up(-1.2465, 2) == -1.25

0 commit comments

Comments
 (0)