• [Python-announce] rounder: A Python package for rounding numbers in complex objects

    From Marcin Kozak@nyggus@gmail.com to comp.lang.python.announce on Tue Aug 30 14:01:19 2022
    From Newsgroup: comp.lang.python.announce

    Hi all!

    When you work with numbers and need to print them, more often than not you
    want to round them. You can use the built-in round() function:
    round(1.123, 2)
    1.12
    x = [1.123, 44.32, 12.11234]
    [round(x_i, 2) for x_i in x]
    [ 1.12, 44.32, 12.11]

    However, when you want to round numbers in a more complex Python object,
    you need to be careful; you may also need to write a dedicated function to round numbers in this object, and you may need to update it if the object's structure changes.

    Now, you do not need to do that: use the rounder Python package instead. It will round numbers in any non-nested or nested Python object, using the following functions:
    * round_object(obj, digits), which rounds numbers in the object to a
    provided number of decimal digits
    * ceil_object(obj), which rounds numbers up to the nearest integer
    * floor_object(obj), which rounds numbers down to the nearest integer
    * signif_object(obj, digits), which rounds numbers to a number of
    significant digits

    So, for example:

    obj = {'float': 1.345442, 'list': [1.1222, 1.1226, "string"], 'set': {1.1222, 1.1226}, 'tuple': (1.1222, 1.1226)}
    round_object(obj, 2)
    {'float': 1.35, 'list': [1.12, 1.12, "string"], 'set': {1.12}, 'tuple':
    (1.12, 1.12)}
    signif_object(obj, 3)
    {'float': 1.35, 'list': [1.12, 1.12, "string"], 'set': {1.12}, 'tuple':
    (1.12, 1.12)}

    The package offers also two other functions:
    * signif(x, digits), to round a number to significant digits
    * map_object(map_function, obj, use_copy=False)

    The latter function is a generalized function that applies callable map_function to all numbers in obj. Consider this simplistic example:
    map_object(lambda x: x**2, {'a': 3, 'b': [1, 2, 3]})
    {'a': 9, 'b': [1, 4, 9]}

    The package works with objects of many different types, not only those
    shown above. It works under both Windows and Linux. You can install it from PyPi:
    $ pip install rounder

    You will learn more about it from its GitHub repo: https://github.com/nyggus/rounder.

    Happy rounding!

    Pozdrawiam,
    Marcin
    --- Synchronet 3.19c-Linux NewsLink 1.113