rounders


Namerounders JSON
Version 0.2.0 PyPI version JSON
download
home_pageNone
Summaryround-function equivalents with different rounding-modes
upload_time2024-06-09 10:12:11
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords round rounding significant figures decimal places rounding mode
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rounders

The `rounders` package extends the functionality provided by Python's built-in
[`round`](https://docs.python.org/3/library/functions.html#round) function. It aims to
provide a more complete and consistent collection of decimal rounding functionality than
is provided by the Python core and standard library. Specifically, it provides:

* Drop-in replacements for `round` that use rounding modes other than Python's default
  Banker's rounding mode. Thirteen different rounding modes are available.
* Functionality for rounding to a given number of significant figures, rather than to a
  set number of places after or before the decimal point.

## Package contents

### General-purpose rounding functions

There are four general-purpose rounding functions. These all accept an optional `mode`
argument for specifying the rounding mode, and default to using `TIES_TO_EVEN` (Banker's
rounding) if no mode is specified.

* The `round` function has the same signature as the built-in `round`. It supports
  rounding to the nearest integer in the direction of the given rounding mode, and
  rounding to a given number of places while preserving the type of the input.

  ```python
  >>> from rounders import round, TIES_TO_AWAY, TO_MINUS
  >>> round(2.5)  # The default rounding mode is TIES_TO_EVEN
  2
  >>> round(2.5, mode=TIES_TO_AWAY)  # round halfway cases away from zero
  3
  >>> round(2.97, 1, mode=TO_MINUS)  # round towards negative infinity (like floor)
  2.9
  >>> round(Decimal(-1628), -2, mode=TO_MINUS)  # Decimal and Fraction types supported
  Decimal('-1.7E+3')
  ```

* The `round_to_figures` function rounds to a given number of significant figures,
  rather than to a given number of places before or after the decimal point.

  ```python
  >>> from rounders import round_to_figures, TO_AWAY
  >>> round_to_figures(1.234567, 3)
  1.23
  >>> round_to_figures(1234567., 3)
  1230000.0
  >>> round_to_figures(0.0001234567, 3)
  0.000123
  >>> round_to_figures(0.0001234567, 3, mode=TO_AWAY)  # round away from zero
  0.000124
  ```

* The `round_to_int` and `round_to_places` functions provide separately the two pieces
  of functionality that `round` combines: `round_to_int` rounds to a nearby integer
  using the given rounding mode, while `round_to_places` always expects an `ndigits`
  argument and rounds to the given number of places. The `round` function is currently a
  simple wrapper around `round_to_int` and `round_to_places`.

  ```python
  >>> from rounders import round_to_int, round_to_places, TO_PLUS
  >>> round_to_int(3.1415, mode=TO_PLUS)
  4
  >>> round_to_places(3.1415, 2, mode=TO_PLUS)
  3.15
  ```


### Rounding-mode-specific rounding functions

There are thirteen functions that act as drop-in replacements for `round`, but that use
a specific rounding mode. For example, if you always want to round ties away from zero
instead of to the nearest even number, you can do this:

```python
>>> from rounders import round_ties_to_away as round
>>> round(4.5)
5
>>> round(1.25, 1)
1.3
```

Or if you want a version of `math.ceil` that accepts a number of places after the point,
you can do:

```python
>>> from rounders import ceil
>>> ceil(1.78)
2
>>> ceil(1.782, 2)
1.79
>>> ceil(-1.782, 2)
-1.78
```

The complete list of functions is [below](#rounding-modes)

## Rounding modes

These are the currently supported rounding modes, along with their corresponding
mode-specific rounding functions.

### To-nearest rounding modes

There are six to-nearest rounding modes: these all round to the closest target value
(e.g., to the closest integer in the case of `round_to_int`), and differ only in their
handling of ties.

| Rounding mode   | Function              | Description                            |
|-----------------|-----------------------|----------------------------------------|
| `TIES_TO_EVEN`  | `round_ties_to_even`  | Ties rounded to the nearest even value |
| `TIES_TO_ODD`   | `round_ties_to_odd`   | Ties rounded to the nearest odd value  |
| `TIES_TO_AWAY`  | `round_ties_to_away`  | Ties rounded away from zero            |
| `TIES_TO_ZERO`  | `round_ties_to_zero`  | Ties rounded towards zero              |
| `TIES_TO_MINUS` | `round_ties_to_minus` | Ties rounded towards negative infinity |
| `TIES_TO_PLUS`  | `round_ties_to_plus`  | Ties rounded towards positive infinity |

### Directed rounding modes

There are six matching directed rounding modes: for these, all values between any two
representable output values will be rounded in the same direction.

| Rounding mode | Function              | Description                     |
|---------------|-----------------------|---------------------------------|
| `TO_EVEN`     | `round_to_even`       | Round to the nearest even value |
| `TO_ODD`      | `round_to_odd`        | Round to the nearest odd value  |
| `TO_AWAY`     | `round_to_away`       | Round away from zero            |
| `TO_ZERO`     | `round_to_zero`       | Round towards zero              |
| `TO_MINUS`    | `round_to_minus`      | Round towards negative infinity |
| `TO_PLUS`     | `round_to_plus`       | Round towards positive infinity |

### Miscellaneous rounding modes

There's one miscellaneous rounding mode `TO_ZERO_05_AWAY`, with corresponding function
`round_to_zero_05_away`.

| Rounding mode     | Function                | Description       |
|-------------------|-------------------------|-------------------|
| `TO_ZERO_05_AWAY` | `round_to_zero_05_away` | See below         |

This rounding mode matches the behaviour of `TO_ZERO`, _except_ in the case where
rounding towards zero would produce a final significant digit of `0` or `5`. In that
case, it matches the behaviour of `TO_AWAY` instead. Note that in the case where the
value is already rounded to the required number of digits, neither `TO_ZERO` nor
`TO_AWAY` would change its value, and similarly `TO_ZERO_05_AWAY` does not change
the value in this case.

```python
>>> from rounders import round_to_zero_05_away
>>> round_to_zero_05_away(1.234, 1)  # behaves like `TO_ZERO`
1.2
>>> round_to_zero_05_away(-1.294, 1)  # also behaves like `TO_ZERO`
-1.2
>>> round_to_zero_05_away(1.534, 1)  # `TO_ZERO` would give 1.5, so round away
1.6
>>> round_to_zero_05_away(-2.088, 1)  # `TO_ZERO` would give -2.0, so round away
-2.1
>>> round_to_zero_05_away(3.5, 1)  # `TO_ZERO` wouldn't change the value; leave as-is
3.5
```

### Aliases

The functions `trunc`, `floor` and `ceil` are aliases for `round_to_zero`,
`round_to_minus` and `round_to_plus`, respectively.

## Notes on rounding modes

Some notes on particular rounding modes:

* `TIES_TO_EVEN` goes by a [variety of
  names](https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even), including
  "Banker's rounding", "statisticians' rounding", and "Dutch rounding". It matches
  Python's default rounding mode and the IEEE 754 default rounding mode,
  `roundTiesToEven`. Many other languages also use this rounding mode by default.
* `TIES_TO_AWAY` appears to be the rounding mode most commonly taught in schools, and
  is the mode that users often mistakenly expect `round` to use. Python 2's `round`
  function used this rounding mode.
* `TIES_TO_PLUS` matches the rounding mode used by JavaScript's `Math.round`, and also
  appears to be commonly taught. (See [ECMA-262, 13th
  edn.](https://262.ecma-international.org/13.0/), ยง21.3.2.28.)
* `TIES_TO_ZERO` is used in IEEE 754's "Augmented arithmetic operations".
* `TO_ZERO` matches the behaviour of `math.trunc`
* `TO_PLUS` matches the behaviour of `math.ceil`
* `TO_MINUS` matches the behaviour of `math.floor`
* `TO_ODD` is interesting as a form of "round for reround", providing a way to avoid the
  phenomenon of [double
  rounding](https://en.wikipedia.org/wiki/Rounding#Double_rounding). Suppose we're
  given a real number `x` and a number of places `p`. Let `y` be the result of rounding
  `x` to `p + 2` places using the `TO_ODD` rounding mode. Then `y` can act as a proxy
  for `x` when rounding to `p` places, in the sense that `y` and `x` will round the
  same way under any of the rounding modes defined in this module. (The binary analog
  of `TO_ODD` is a little more useful here - it works in the same way, but requires
  only two extra bits for the intermediate value instead of two extra digits.)
* `TO_ZERO_05_AWAY` also provides a form of "round for reround", but is more efficient
  in that it only requires one extra decimal digit instead of two. Given a value `x`
  and a number of places `p`, if `y = round(x, p + 1, mode=TO_ZERO_05_AWAY)`, then
  `round(x, p, mode=mode) == round(y, p, mode=mode)` for any of the thirteen rounding
  modes defined in this package.

  ```python
  >>> from rounders import *
  >>> import random
  >>> x = random.uniform(-1.0, 1.0)
  >>> y = round(x, 5, mode=TO_ZERO_05_AWAY)
  >>> round(x, 4, mode=TO_ZERO) == round(y, 4, mode=TO_ZERO)
  True
  >>> round(x, 4, mode=TIES_TO_ODD) == round(y, 4, mode=TIES_TO_ODD)
  True
  >>> round(x, 4, mode=TO_ZERO_05_AWAY) == round(y, 4, mode=TO_ZERO_05_AWAY)
  True
  ```
On relationships between the rounding modes in this package and rounding modes
elsewhere:

* IEEE 754 defines five "rounding-direction" attributes: `roundTiesToEven`,
  `roundTiesToAway`, `roundTowardPositive`, `roundTowardNegative` and `roundTowardZero`.
  These match `TIES_TO_EVEN`, `TIES_TO_AWAY`, `TO_PLUS`, `TO_MINUS` and `TO_ZERO`,
  respectively. The "Augmented arithmetic operations" section of IEEE 754-2019 also
  defines an attribute `roundTiesToZero`, corresponding to `TIES_TO_ZERO` in this
  module.

  | IEEE 754 rounding direction | `rounders` rounding mode |
  |-----------------------------|--------------------------|
  | `roundTiesToEven`           | `TIES_TO_EVEN`           |
  | `roundTiesToAway`           | `TIES_TO_AWAY`           |
  | `roundTiesToZero`           | `TIES_TO_ZERO`           |
  | `roundTowardPositive`       | `TO_PLUS`                |
  | `roundTowardNegative`       | `TO_MINUS`               |
  | `roundTowardZero`           | `TO_ZERO`                |

* As of Python 3.11, Python's
  [`decimal`](https://docs.python.org/3/library/decimal.html) module defines eight
  rounding options, corresponding to the rounding modes in this module as follows:

  | `decimal` rounding option | `rounders` rounding mode |
  |---------------------------|--------------------------|
  | `ROUND_CEILING`           | `TO_PLUS`                |
  | `ROUND_DOWN`              | `TO_ZERO`                |
  | `ROUND_FLOOR`             | `TO_MINUS`               |
  | `ROUND_HALF_DOWN`         | `TIES_TO_ZERO`           |
  | `ROUND_HALF_EVEN`         | `TIES_TO_EVEN`           |
  | `ROUND_HALF_UP`           | `TIES_TO_AWAY`           |
  | `ROUND_UP`                | `TO_AWAY`                |
  | `ROUND_05UP`              | `TO_ZERO_05_AWAY`        |


## Supported numeric types

Out of the box, `rounders` supports Python's built-in numeric types: `int`, `float`,
`decimal.Decimal` and `fractions.Fraction`. Under the hood, it uses
[`functools.singledispatch`](https://docs.python.org/3/library/functools.html#functools.singledispatch)
for all type-specific operations. This should allow easy extension to new numeric
types in the future. The extension mechanism has not yet stabilised.


## Future directions

Major goals for future releases:

- Add formatting support, including the ability to specify rounding direction in a
  format specification.
- Finalise and document mechanisms for adding support for custom types.
- Improve performance of `round`, especially for the `float` type, with the aid of
  a C extension if necessary.
- Better document the pitfalls of `round` applied to binary floats (especially for
  directed rounding modes, where `round` is not idempotent).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rounders",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "round, rounding, significant figures, decimal places, rounding mode",
    "author": null,
    "author_email": "Mark Dickinson <dickinsm@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/af/a0/bad362544283bbf88bbcfef3ec12e2fe7f23a6935d4f904c89125e707011/rounders-0.2.0.tar.gz",
    "platform": null,
    "description": "# Rounders\n\nThe `rounders` package extends the functionality provided by Python's built-in\n[`round`](https://docs.python.org/3/library/functions.html#round) function. It aims to\nprovide a more complete and consistent collection of decimal rounding functionality than\nis provided by the Python core and standard library. Specifically, it provides:\n\n* Drop-in replacements for `round` that use rounding modes other than Python's default\n  Banker's rounding mode. Thirteen different rounding modes are available.\n* Functionality for rounding to a given number of significant figures, rather than to a\n  set number of places after or before the decimal point.\n\n## Package contents\n\n### General-purpose rounding functions\n\nThere are four general-purpose rounding functions. These all accept an optional `mode`\nargument for specifying the rounding mode, and default to using `TIES_TO_EVEN` (Banker's\nrounding) if no mode is specified.\n\n* The `round` function has the same signature as the built-in `round`. It supports\n  rounding to the nearest integer in the direction of the given rounding mode, and\n  rounding to a given number of places while preserving the type of the input.\n\n  ```python\n  >>> from rounders import round, TIES_TO_AWAY, TO_MINUS\n  >>> round(2.5)  # The default rounding mode is TIES_TO_EVEN\n  2\n  >>> round(2.5, mode=TIES_TO_AWAY)  # round halfway cases away from zero\n  3\n  >>> round(2.97, 1, mode=TO_MINUS)  # round towards negative infinity (like floor)\n  2.9\n  >>> round(Decimal(-1628), -2, mode=TO_MINUS)  # Decimal and Fraction types supported\n  Decimal('-1.7E+3')\n  ```\n\n* The `round_to_figures` function rounds to a given number of significant figures,\n  rather than to a given number of places before or after the decimal point.\n\n  ```python\n  >>> from rounders import round_to_figures, TO_AWAY\n  >>> round_to_figures(1.234567, 3)\n  1.23\n  >>> round_to_figures(1234567., 3)\n  1230000.0\n  >>> round_to_figures(0.0001234567, 3)\n  0.000123\n  >>> round_to_figures(0.0001234567, 3, mode=TO_AWAY)  # round away from zero\n  0.000124\n  ```\n\n* The `round_to_int` and `round_to_places` functions provide separately the two pieces\n  of functionality that `round` combines: `round_to_int` rounds to a nearby integer\n  using the given rounding mode, while `round_to_places` always expects an `ndigits`\n  argument and rounds to the given number of places. The `round` function is currently a\n  simple wrapper around `round_to_int` and `round_to_places`.\n\n  ```python\n  >>> from rounders import round_to_int, round_to_places, TO_PLUS\n  >>> round_to_int(3.1415, mode=TO_PLUS)\n  4\n  >>> round_to_places(3.1415, 2, mode=TO_PLUS)\n  3.15\n  ```\n\n\n### Rounding-mode-specific rounding functions\n\nThere are thirteen functions that act as drop-in replacements for `round`, but that use\na specific rounding mode. For example, if you always want to round ties away from zero\ninstead of to the nearest even number, you can do this:\n\n```python\n>>> from rounders import round_ties_to_away as round\n>>> round(4.5)\n5\n>>> round(1.25, 1)\n1.3\n```\n\nOr if you want a version of `math.ceil` that accepts a number of places after the point,\nyou can do:\n\n```python\n>>> from rounders import ceil\n>>> ceil(1.78)\n2\n>>> ceil(1.782, 2)\n1.79\n>>> ceil(-1.782, 2)\n-1.78\n```\n\nThe complete list of functions is [below](#rounding-modes)\n\n## Rounding modes\n\nThese are the currently supported rounding modes, along with their corresponding\nmode-specific rounding functions.\n\n### To-nearest rounding modes\n\nThere are six to-nearest rounding modes: these all round to the closest target value\n(e.g., to the closest integer in the case of `round_to_int`), and differ only in their\nhandling of ties.\n\n| Rounding mode   | Function              | Description                            |\n|-----------------|-----------------------|----------------------------------------|\n| `TIES_TO_EVEN`  | `round_ties_to_even`  | Ties rounded to the nearest even value |\n| `TIES_TO_ODD`   | `round_ties_to_odd`   | Ties rounded to the nearest odd value  |\n| `TIES_TO_AWAY`  | `round_ties_to_away`  | Ties rounded away from zero            |\n| `TIES_TO_ZERO`  | `round_ties_to_zero`  | Ties rounded towards zero              |\n| `TIES_TO_MINUS` | `round_ties_to_minus` | Ties rounded towards negative infinity |\n| `TIES_TO_PLUS`  | `round_ties_to_plus`  | Ties rounded towards positive infinity |\n\n### Directed rounding modes\n\nThere are six matching directed rounding modes: for these, all values between any two\nrepresentable output values will be rounded in the same direction.\n\n| Rounding mode | Function              | Description                     |\n|---------------|-----------------------|---------------------------------|\n| `TO_EVEN`     | `round_to_even`       | Round to the nearest even value |\n| `TO_ODD`      | `round_to_odd`        | Round to the nearest odd value  |\n| `TO_AWAY`     | `round_to_away`       | Round away from zero            |\n| `TO_ZERO`     | `round_to_zero`       | Round towards zero              |\n| `TO_MINUS`    | `round_to_minus`      | Round towards negative infinity |\n| `TO_PLUS`     | `round_to_plus`       | Round towards positive infinity |\n\n### Miscellaneous rounding modes\n\nThere's one miscellaneous rounding mode `TO_ZERO_05_AWAY`, with corresponding function\n`round_to_zero_05_away`.\n\n| Rounding mode     | Function                | Description       |\n|-------------------|-------------------------|-------------------|\n| `TO_ZERO_05_AWAY` | `round_to_zero_05_away` | See below         |\n\nThis rounding mode matches the behaviour of `TO_ZERO`, _except_ in the case where\nrounding towards zero would produce a final significant digit of `0` or `5`. In that\ncase, it matches the behaviour of `TO_AWAY` instead. Note that in the case where the\nvalue is already rounded to the required number of digits, neither `TO_ZERO` nor\n`TO_AWAY` would change its value, and similarly `TO_ZERO_05_AWAY` does not change\nthe value in this case.\n\n```python\n>>> from rounders import round_to_zero_05_away\n>>> round_to_zero_05_away(1.234, 1)  # behaves like `TO_ZERO`\n1.2\n>>> round_to_zero_05_away(-1.294, 1)  # also behaves like `TO_ZERO`\n-1.2\n>>> round_to_zero_05_away(1.534, 1)  # `TO_ZERO` would give 1.5, so round away\n1.6\n>>> round_to_zero_05_away(-2.088, 1)  # `TO_ZERO` would give -2.0, so round away\n-2.1\n>>> round_to_zero_05_away(3.5, 1)  # `TO_ZERO` wouldn't change the value; leave as-is\n3.5\n```\n\n### Aliases\n\nThe functions `trunc`, `floor` and `ceil` are aliases for `round_to_zero`,\n`round_to_minus` and `round_to_plus`, respectively.\n\n## Notes on rounding modes\n\nSome notes on particular rounding modes:\n\n* `TIES_TO_EVEN` goes by a [variety of\n  names](https://en.wikipedia.org/wiki/Rounding#Rounding_half_to_even), including\n  \"Banker's rounding\", \"statisticians' rounding\", and \"Dutch rounding\". It matches\n  Python's default rounding mode and the IEEE 754 default rounding mode,\n  `roundTiesToEven`. Many other languages also use this rounding mode by default.\n* `TIES_TO_AWAY` appears to be the rounding mode most commonly taught in schools, and\n  is the mode that users often mistakenly expect `round` to use. Python 2's `round`\n  function used this rounding mode.\n* `TIES_TO_PLUS` matches the rounding mode used by JavaScript's `Math.round`, and also\n  appears to be commonly taught. (See [ECMA-262, 13th\n  edn.](https://262.ecma-international.org/13.0/), \u00a721.3.2.28.)\n* `TIES_TO_ZERO` is used in IEEE 754's \"Augmented arithmetic operations\".\n* `TO_ZERO` matches the behaviour of `math.trunc`\n* `TO_PLUS` matches the behaviour of `math.ceil`\n* `TO_MINUS` matches the behaviour of `math.floor`\n* `TO_ODD` is interesting as a form of \"round for reround\", providing a way to avoid the\n  phenomenon of [double\n  rounding](https://en.wikipedia.org/wiki/Rounding#Double_rounding). Suppose we're\n  given a real number `x` and a number of places `p`. Let `y` be the result of rounding\n  `x` to `p + 2` places using the `TO_ODD` rounding mode. Then `y` can act as a proxy\n  for `x` when rounding to `p` places, in the sense that `y` and `x` will round the\n  same way under any of the rounding modes defined in this module. (The binary analog\n  of `TO_ODD` is a little more useful here - it works in the same way, but requires\n  only two extra bits for the intermediate value instead of two extra digits.)\n* `TO_ZERO_05_AWAY` also provides a form of \"round for reround\", but is more efficient\n  in that it only requires one extra decimal digit instead of two. Given a value `x`\n  and a number of places `p`, if `y = round(x, p + 1, mode=TO_ZERO_05_AWAY)`, then\n  `round(x, p, mode=mode) == round(y, p, mode=mode)` for any of the thirteen rounding\n  modes defined in this package.\n\n  ```python\n  >>> from rounders import *\n  >>> import random\n  >>> x = random.uniform(-1.0, 1.0)\n  >>> y = round(x, 5, mode=TO_ZERO_05_AWAY)\n  >>> round(x, 4, mode=TO_ZERO) == round(y, 4, mode=TO_ZERO)\n  True\n  >>> round(x, 4, mode=TIES_TO_ODD) == round(y, 4, mode=TIES_TO_ODD)\n  True\n  >>> round(x, 4, mode=TO_ZERO_05_AWAY) == round(y, 4, mode=TO_ZERO_05_AWAY)\n  True\n  ```\nOn relationships between the rounding modes in this package and rounding modes\nelsewhere:\n\n* IEEE 754 defines five \"rounding-direction\" attributes: `roundTiesToEven`,\n  `roundTiesToAway`, `roundTowardPositive`, `roundTowardNegative` and `roundTowardZero`.\n  These match `TIES_TO_EVEN`, `TIES_TO_AWAY`, `TO_PLUS`, `TO_MINUS` and `TO_ZERO`,\n  respectively. The \"Augmented arithmetic operations\" section of IEEE 754-2019 also\n  defines an attribute `roundTiesToZero`, corresponding to `TIES_TO_ZERO` in this\n  module.\n\n  | IEEE 754 rounding direction | `rounders` rounding mode |\n  |-----------------------------|--------------------------|\n  | `roundTiesToEven`           | `TIES_TO_EVEN`           |\n  | `roundTiesToAway`           | `TIES_TO_AWAY`           |\n  | `roundTiesToZero`           | `TIES_TO_ZERO`           |\n  | `roundTowardPositive`       | `TO_PLUS`                |\n  | `roundTowardNegative`       | `TO_MINUS`               |\n  | `roundTowardZero`           | `TO_ZERO`                |\n\n* As of Python 3.11, Python's\n  [`decimal`](https://docs.python.org/3/library/decimal.html) module defines eight\n  rounding options, corresponding to the rounding modes in this module as follows:\n\n  | `decimal` rounding option | `rounders` rounding mode |\n  |---------------------------|--------------------------|\n  | `ROUND_CEILING`           | `TO_PLUS`                |\n  | `ROUND_DOWN`              | `TO_ZERO`                |\n  | `ROUND_FLOOR`             | `TO_MINUS`               |\n  | `ROUND_HALF_DOWN`         | `TIES_TO_ZERO`           |\n  | `ROUND_HALF_EVEN`         | `TIES_TO_EVEN`           |\n  | `ROUND_HALF_UP`           | `TIES_TO_AWAY`           |\n  | `ROUND_UP`                | `TO_AWAY`                |\n  | `ROUND_05UP`              | `TO_ZERO_05_AWAY`        |\n\n\n## Supported numeric types\n\nOut of the box, `rounders` supports Python's built-in numeric types: `int`, `float`,\n`decimal.Decimal` and `fractions.Fraction`. Under the hood, it uses\n[`functools.singledispatch`](https://docs.python.org/3/library/functools.html#functools.singledispatch)\nfor all type-specific operations. This should allow easy extension to new numeric\ntypes in the future. The extension mechanism has not yet stabilised.\n\n\n## Future directions\n\nMajor goals for future releases:\n\n- Add formatting support, including the ability to specify rounding direction in a\n  format specification.\n- Finalise and document mechanisms for adding support for custom types.\n- Improve performance of `round`, especially for the `float` type, with the aid of\n  a C extension if necessary.\n- Better document the pitfalls of `round` applied to binary floats (especially for\n  directed rounding modes, where `round` is not idempotent).\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "round-function equivalents with different rounding-modes",
    "version": "0.2.0",
    "project_urls": {
        "source": "https://github.com/mdickinson/rounders"
    },
    "split_keywords": [
        "round",
        " rounding",
        " significant figures",
        " decimal places",
        " rounding mode"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ad45ab826de4b232045f234a9877b1ca74300d3c1dc66b6e20e4a7a197587cda",
                "md5": "49fcd31aa6c5c150da381df0c9101ac1",
                "sha256": "fe00a257d536eb5c92b32fd42b10a730429f083a3990b6ca9d808ec722adfd3c"
            },
            "downloads": -1,
            "filename": "rounders-0.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "49fcd31aa6c5c150da381df0c9101ac1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 36638,
            "upload_time": "2024-06-09T10:12:10",
            "upload_time_iso_8601": "2024-06-09T10:12:10.393383Z",
            "url": "https://files.pythonhosted.org/packages/ad/45/ab826de4b232045f234a9877b1ca74300d3c1dc66b6e20e4a7a197587cda/rounders-0.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "afa0bad362544283bbf88bbcfef3ec12e2fe7f23a6935d4f904c89125e707011",
                "md5": "065c3d0af77a4e23dd224c576f5ee7b7",
                "sha256": "cc6b4d3a9f71735afcad269e3ab062f915f872a3d8c35ade7b584e6b481f8549"
            },
            "downloads": -1,
            "filename": "rounders-0.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "065c3d0af77a4e23dd224c576f5ee7b7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 41443,
            "upload_time": "2024-06-09T10:12:11",
            "upload_time_iso_8601": "2024-06-09T10:12:11.723327Z",
            "url": "https://files.pythonhosted.org/packages/af/a0/bad362544283bbf88bbcfef3ec12e2fe7f23a6935d4f904c89125e707011/rounders-0.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-09 10:12:11",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mdickinson",
    "github_project": "rounders",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "rounders"
}
        
Elapsed time: 3.97730s