blob: ad7136744b851ff651e18aa4f98e3b87e9291981 (
plain)
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

#!/usr/bin/env python3
# *****************************************************************************
# Copyright (C) 2022 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
# This file is part of the thcolor project, which is MITlicensed.
# *****************************************************************************
""" Utilities for the thcolor module. """
from typing import Optional as _Optional
__all__ = ['factor', 'round_half_up']
def factor(x, max_: int = 100, clip: bool = False):
""" Return a factor based on if something is a float or an int. """
if isinstance(x, float):
pass
elif x in (0, 1) and max_ == 100:
x = float(x)
else:
x /= max_
if clip:
x = max(0, min(1, x))
return x
def round_half_up(number: float, ndigits: _Optional[int] = None) > float:
""" Round a number to the nearest integer.
This function exists because Python's builtin ``round`` function
uses halftoeven rounding, also called "Banker's rounding".
This means that 1.5 is rounded to 2 and 2.5 is also rounded to 2.
What we want is a halftoup rounding, so we have this function.
"""
if ndigits is None:
ndigits = 0
base = 10 ** ndigits
return (number // base) * base + (
base if (number % base) >= (base / 2) else 0
)
# End of file.
