Skip to main content

Mypy plugin to prevent passing float type to Decimal to avoid imprecisions.

Project description

Mypy non-float Decimal plugin

Restricts passing float numbers to Decimal

Why?

The implementation of floating point numbers can cause imprecisions in results. To avoid this problem you can use Decimal type, however you still need to avoid passing float as its parameter:

>>> Decimal(1.02)
Decimal("1.020000000000000017763568394002504646778106689453125")
>>> Decimal("1.02")
Decimal("1.02")

This plugin is meant to spot occurrences where float is passed to Decimal in your code.

Usage

  • install plugin
pip install mypy-nonfloat-decimal
  • add it into list of mypy plugins in your mypy config (mypy.ini)
[mypy]
plugins=mypy_nonfloat_decimal
  • upon running mypy will detect float passed to Decimal and report it as an error (example.py):
from decimal import Decimal
Decimal(1.02)
$ mypy --config-file ./mypy.ini ./example.py

example.py:2: error: Invalid type passed to Decimal (expected "Union[int, str, Decimal]"), got float instead

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for mypy-nonfloat-decimal, version 0.1.2
Filename, size File type Python version Upload date Hashes
Filename, size mypy_nonfloat_decimal-0.1.2-py3-none-any.whl (2.8 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size mypy-nonfloat-decimal-0.1.2.tar.gz (2.4 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page