/
my_round.py
65 lines (49 loc) · 917 Bytes
/
my_round.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
def my_round(val, digit=0):
p = 10 ** digit
return (val * p * 2 + 1) // 2 / p
my_round_int = lambda x: int((x * 2 + 1) // 2)
f = 123.456
print(int(my_round(f)))
# 123
print(my_round_int(f))
# 123
print(my_round(f, 1))
# 123.5
print(my_round(f, 2))
# 123.46
print(int(my_round(0.4)))
print(int(my_round(0.5)))
print(int(my_round(0.6)))
# 0
# 1
# 1
i = 99518
print(int(my_round(i, -1)))
# 99520
print(int(my_round(i, -2)))
# 99500
print(int(my_round(i, -3)))
# 100000
print(int(my_round(4, -1)))
print(int(my_round(5, -1)))
print(int(my_round(6, -1)))
# 0
# 10
# 10
print(int(my_round(-0.4)))
print(int(my_round(-0.5)))
print(int(my_round(-0.6)))
# 0
# 0
# -1
import math
def my_round2(val, digit=0):
p = 10 ** digit
s = math.copysign(1, val)
return (s * val * p * 2 + 1) // 2 / p * s
print(int(my_round2(-0.4)))
print(int(my_round2(-0.5)))
print(int(my_round2(-0.6)))
# 0
# -1
# -1