Passed
Push — master ( a892fa...d1ecba )
by Ken M.
01:03
created

friendly_number.friendly_number()   A

Complexity

Conditions 5

Size

Total Lines 21
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 16
nop 5
dl 0
loc 21
rs 9.1333
c 0
b 0
f 0
1
def friendly_number(
2
    number,
3
    base=1000,
4
    decimals=0,
5
    suffix='',
6
    powers=['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'],
7
):
8
    # Format a number as friendly text, using common suffixes.
9
    greaterThan0 = number >= 0
10
    number = abs(number)
11
    for i in range(len(powers)):
12
        if number / base ** i < base:
13
            break
14
    value = number / base ** i
15
16
    if decimals:
17
        format_string = '{0:0<.%df}{1}{2}' % (decimals)
18
        value = format_string.format(value, powers[i], suffix)
19
    else:
20
        format_string = '{0}{1}{2}'
21
        value = format_string.format(int(value), powers[i], suffix)
22
23
    if greaterThan0:
24
        return value
25
    else:
26
        return '-' + value
27
28
29
# These "asserts" using only for self-checking and not necessary for
30
# auto-testing
31
if __name__ == '__main__':
32
    assert friendly_number(102) == '102', '102'
33
    assert friendly_number(10240) == '10k', '10k'
34
    assert friendly_number(12_341_234, decimals=1) == '12.3M', '12.3M'
35
    assert friendly_number(12461, decimals=1) == '12.5k', '12.5k'
36
    assert friendly_number(1_024_000_000, base=1024, suffix='iB') == '976MiB', '976MiB'
37