mirror of
				https://github.com/bunny-lab-io/Borealis.git
				synced 2025-10-29 23:21:58 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			2725 lines
		
	
	
		
			283 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2725 lines
		
	
	
		
			283 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | ||
| 
 | ||
| <html lang="en" data-content_root="../">
 | ||
|   <head>
 | ||
|     <meta charset="utf-8" />
 | ||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
 | ||
| <meta property="og:title" content="decimal — Decimal fixed-point and floating-point arithmetic" />
 | ||
| <meta property="og:type" content="website" />
 | ||
| <meta property="og:url" content="https://docs.python.org/3/library/decimal.html" />
 | ||
| <meta property="og:site_name" content="Python documentation" />
 | ||
| <meta property="og:description" content="Source code: Lib/decimal.py The decimal module provides support for fast correctly rounded decimal floating-point arithmetic. It offers several advantages over the float datatype: Decimal “is based..." />
 | ||
| <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
 | ||
| <meta property="og:image:alt" content="Python documentation" />
 | ||
| <meta name="description" content="Source code: Lib/decimal.py The decimal module provides support for fast correctly rounded decimal floating-point arithmetic. It offers several advantages over the float datatype: Decimal “is based..." />
 | ||
| <meta property="og:image:width" content="200">
 | ||
| <meta property="og:image:height" content="200">
 | ||
| <meta name="theme-color" content="#3776ab">
 | ||
| 
 | ||
|     <title>decimal — Decimal fixed-point and floating-point arithmetic — Python 3.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
 | ||
|     
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
 | ||
|     <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
 | ||
|     
 | ||
|     <script src="../_static/documentation_options.js?v=5d57ca2d"></script>
 | ||
|     <script src="../_static/doctools.js?v=9bcbadda"></script>
 | ||
|     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
 | ||
|     
 | ||
|     <script src="../_static/sidebar.js"></script>
 | ||
|     
 | ||
|     <link rel="search" type="application/opensearchdescription+xml"
 | ||
|           title="Search within Python 3.13.3 documentation"
 | ||
|           href="../_static/opensearch.xml"/>
 | ||
|     <link rel="author" title="About these documents" href="../about.html" />
 | ||
|     <link rel="index" title="Index" href="../genindex.html" />
 | ||
|     <link rel="search" title="Search" href="../search.html" />
 | ||
|     <link rel="copyright" title="Copyright" href="../copyright.html" />
 | ||
|     <link rel="next" title="fractions — Rational numbers" href="fractions.html" />
 | ||
|     <link rel="prev" title="cmath — Mathematical functions for complex numbers" href="cmath.html" />
 | ||
|     
 | ||
|     <link rel="canonical" href="https://docs.python.org/3/library/decimal.html">
 | ||
|     
 | ||
|       
 | ||
|     
 | ||
| 
 | ||
|     
 | ||
|     <style>
 | ||
|       @media only screen {
 | ||
|         table.full-width-table {
 | ||
|             width: 100%;
 | ||
|         }
 | ||
|       }
 | ||
|     </style>
 | ||
| <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
 | ||
|     <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
 | ||
|             <script type="text/javascript" src="../_static/copybutton.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/menu.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/search-focus.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/themetoggle.js"></script> 
 | ||
|             <script type="text/javascript" src="../_static/rtd_switcher.js"></script>
 | ||
|             <meta name="readthedocs-addons-api-version" content="1">
 | ||
| 
 | ||
|   </head>
 | ||
| <body>
 | ||
| <div class="mobile-nav">
 | ||
|     <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
 | ||
|            aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
 | ||
|     <nav class="nav-content" role="navigation">
 | ||
|         <label for="menuToggler" class="toggler__label">
 | ||
|             <span></span>
 | ||
|         </label>
 | ||
|         <span class="nav-items-wrapper">
 | ||
|             <a href="https://www.python.org/" class="nav-logo">
 | ||
|                 <img src="../_static/py.svg" alt="Python logo"/>
 | ||
|             </a>
 | ||
|             <span class="version_switcher_placeholder"></span>
 | ||
|             <form role="search" class="search" action="../search.html" method="get">
 | ||
|                 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
 | ||
|                     <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
 | ||
|                 </svg>
 | ||
|                 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
 | ||
|                 <input type="submit" value="Go"/>
 | ||
|             </form>
 | ||
|         </span>
 | ||
|     </nav>
 | ||
|     <div class="menu-wrapper">
 | ||
|         <nav class="menu" role="navigation" aria-label="main navigation">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label>
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code> — Decimal fixed-point and floating-point arithmetic</a><ul>
 | ||
| <li><a class="reference internal" href="#quick-start-tutorial">Quick-start Tutorial</a></li>
 | ||
| <li><a class="reference internal" href="#decimal-objects">Decimal objects</a><ul>
 | ||
| <li><a class="reference internal" href="#logical-operands">Logical operands</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#context-objects">Context objects</a></li>
 | ||
| <li><a class="reference internal" href="#constants">Constants</a></li>
 | ||
| <li><a class="reference internal" href="#rounding-modes">Rounding modes</a></li>
 | ||
| <li><a class="reference internal" href="#signals">Signals</a></li>
 | ||
| <li><a class="reference internal" href="#floating-point-notes">Floating-Point Notes</a><ul>
 | ||
| <li><a class="reference internal" href="#mitigating-round-off-error-with-increased-precision">Mitigating round-off error with increased precision</a></li>
 | ||
| <li><a class="reference internal" href="#special-values">Special values</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#working-with-threads">Working with threads</a></li>
 | ||
| <li><a class="reference internal" href="#recipes">Recipes</a></li>
 | ||
| <li><a class="reference internal" href="#decimal-faq">Decimal FAQ</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="cmath.html"
 | ||
|                           title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">cmath</span></code> — Mathematical functions for complex numbers</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="fractions.html"
 | ||
|                           title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">fractions</span></code> — Rational numbers</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/library/decimal.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </nav>
 | ||
|     </div>
 | ||
| </div>
 | ||
| 
 | ||
|   
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              accesskey="I">index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="fractions.html" title="fractions — Rational numbers"
 | ||
|              accesskey="N">next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="cmath.html" title="cmath — Mathematical functions for complex numbers"
 | ||
|              accesskey="P">previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
 | ||
|           <li class="nav-item nav-item-2"><a href="numeric.html" accesskey="U">Numeric and Mathematical Modules</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code> — Decimal fixed-point and floating-point arithmetic</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>    
 | ||
| 
 | ||
|     <div class="document">
 | ||
|       <div class="documentwrapper">
 | ||
|         <div class="bodywrapper">
 | ||
|           <div class="body" role="main">
 | ||
|             
 | ||
|   <section id="module-decimal">
 | ||
| <span id="decimal-decimal-fixed-point-and-floating-point-arithmetic"></span><h1><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code> — Decimal fixed-point and floating-point arithmetic<a class="headerlink" href="#module-decimal" title="Link to this heading">¶</a></h1>
 | ||
| <p><strong>Source code:</strong> <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Lib/decimal.py">Lib/decimal.py</a></p>
 | ||
| <hr class="docutils" />
 | ||
| <p>The <a class="reference internal" href="#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> module provides support for fast correctly rounded
 | ||
| decimal floating-point arithmetic. It offers several advantages over the
 | ||
| <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a> datatype:</p>
 | ||
| <ul>
 | ||
| <li><p>Decimal “is based on a floating-point model which was designed with people
 | ||
| in mind, and necessarily has a paramount guiding principle – computers must
 | ||
| provide an arithmetic that works in the same way as the arithmetic that
 | ||
| people learn at school.” – excerpt from the decimal arithmetic specification.</p></li>
 | ||
| <li><p>Decimal numbers can be represented exactly.  In contrast, numbers like
 | ||
| <code class="docutils literal notranslate"><span class="pre">1.1</span></code> and <code class="docutils literal notranslate"><span class="pre">2.2</span></code> do not have exact representations in binary
 | ||
| floating point. End users typically would not expect <code class="docutils literal notranslate"><span class="pre">1.1</span> <span class="pre">+</span> <span class="pre">2.2</span></code> to display
 | ||
| as <code class="docutils literal notranslate"><span class="pre">3.3000000000000003</span></code> as it does with binary floating point.</p></li>
 | ||
| <li><p>The exactness carries over into arithmetic.  In decimal floating point, <code class="docutils literal notranslate"><span class="pre">0.1</span>
 | ||
| <span class="pre">+</span> <span class="pre">0.1</span> <span class="pre">+</span> <span class="pre">0.1</span> <span class="pre">-</span> <span class="pre">0.3</span></code> is exactly equal to zero.  In binary floating point, the result
 | ||
| is <code class="docutils literal notranslate"><span class="pre">5.5511151231257827e-017</span></code>.  While near to zero, the differences
 | ||
| prevent reliable equality testing and differences can accumulate. For this
 | ||
| reason, decimal is preferred in accounting applications which have strict
 | ||
| equality invariants.</p></li>
 | ||
| <li><p>The decimal module incorporates a notion of significant places so that <code class="docutils literal notranslate"><span class="pre">1.30</span>
 | ||
| <span class="pre">+</span> <span class="pre">1.20</span></code> is <code class="docutils literal notranslate"><span class="pre">2.50</span></code>.  The trailing zero is kept to indicate significance.
 | ||
| This is the customary presentation for monetary applications. For
 | ||
| multiplication, the “schoolbook” approach uses all the figures in the
 | ||
| multiplicands.  For instance, <code class="docutils literal notranslate"><span class="pre">1.3</span> <span class="pre">*</span> <span class="pre">1.2</span></code> gives <code class="docutils literal notranslate"><span class="pre">1.56</span></code> while <code class="docutils literal notranslate"><span class="pre">1.30</span> <span class="pre">*</span>
 | ||
| <span class="pre">1.20</span></code> gives <code class="docutils literal notranslate"><span class="pre">1.5600</span></code>.</p></li>
 | ||
| <li><p>Unlike hardware based binary floating point, the decimal module has a user
 | ||
| alterable precision (defaulting to 28 places) which can be as large as needed for
 | ||
| a given problem:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">6</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.142857')</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">28</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.1428571428571428571428571429')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </li>
 | ||
| <li><p>Both binary and decimal floating point are implemented in terms of published
 | ||
| standards.  While the built-in float type exposes only a modest portion of its
 | ||
| capabilities, the decimal module exposes all required parts of the standard.
 | ||
| When needed, the programmer has full control over rounding and signal handling.
 | ||
| This includes an option to enforce exact arithmetic by using exceptions
 | ||
| to block any inexact operations.</p></li>
 | ||
| <li><p>The decimal module was designed to support “without prejudice, both exact
 | ||
| unrounded decimal arithmetic (sometimes called fixed-point arithmetic)
 | ||
| and rounded floating-point arithmetic.”  – excerpt from the decimal
 | ||
| arithmetic specification.</p></li>
 | ||
| </ul>
 | ||
| <p>The module design is centered around three concepts:  the decimal number, the
 | ||
| context for arithmetic, and signals.</p>
 | ||
| <p>A decimal number is immutable.  It has a sign, coefficient digits, and an
 | ||
| exponent.  To preserve significance, the coefficient digits do not truncate
 | ||
| trailing zeros.  Decimals also include special values such as
 | ||
| <code class="docutils literal notranslate"><span class="pre">Infinity</span></code>, <code class="docutils literal notranslate"><span class="pre">-Infinity</span></code>, and <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.  The standard also
 | ||
| differentiates <code class="docutils literal notranslate"><span class="pre">-0</span></code> from <code class="docutils literal notranslate"><span class="pre">+0</span></code>.</p>
 | ||
| <p>The context for arithmetic is an environment specifying precision, rounding
 | ||
| rules, limits on exponents, flags indicating the results of operations, and trap
 | ||
| enablers which determine whether signals are treated as exceptions.  Rounding
 | ||
| options include <a class="reference internal" href="#decimal.ROUND_CEILING" title="decimal.ROUND_CEILING"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_CEILING</span></code></a>, <a class="reference internal" href="#decimal.ROUND_DOWN" title="decimal.ROUND_DOWN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_DOWN</span></code></a>,
 | ||
| <a class="reference internal" href="#decimal.ROUND_FLOOR" title="decimal.ROUND_FLOOR"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_FLOOR</span></code></a>, <a class="reference internal" href="#decimal.ROUND_HALF_DOWN" title="decimal.ROUND_HALF_DOWN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_DOWN</span></code></a>, <a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a>,
 | ||
| <a class="reference internal" href="#decimal.ROUND_HALF_UP" title="decimal.ROUND_HALF_UP"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_UP</span></code></a>, <a class="reference internal" href="#decimal.ROUND_UP" title="decimal.ROUND_UP"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_UP</span></code></a>, and <a class="reference internal" href="#decimal.ROUND_05UP" title="decimal.ROUND_05UP"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_05UP</span></code></a>.</p>
 | ||
| <p>Signals are groups of exceptional conditions arising during the course of
 | ||
| computation.  Depending on the needs of the application, signals may be ignored,
 | ||
| considered as informational, or treated as exceptions. The signals in the
 | ||
| decimal module are: <a class="reference internal" href="#decimal.Clamped" title="decimal.Clamped"><code class="xref py py-const docutils literal notranslate"><span class="pre">Clamped</span></code></a>, <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-const docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a>,
 | ||
| <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-const docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a>, <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-const docutils literal notranslate"><span class="pre">Inexact</span></code></a>, <a class="reference internal" href="#decimal.Rounded" title="decimal.Rounded"><code class="xref py py-const docutils literal notranslate"><span class="pre">Rounded</span></code></a>, <a class="reference internal" href="#decimal.Subnormal" title="decimal.Subnormal"><code class="xref py py-const docutils literal notranslate"><span class="pre">Subnormal</span></code></a>,
 | ||
| <a class="reference internal" href="#decimal.Overflow" title="decimal.Overflow"><code class="xref py py-const docutils literal notranslate"><span class="pre">Overflow</span></code></a>, <a class="reference internal" href="#decimal.Underflow" title="decimal.Underflow"><code class="xref py py-const docutils literal notranslate"><span class="pre">Underflow</span></code></a> and <a class="reference internal" href="#decimal.FloatOperation" title="decimal.FloatOperation"><code class="xref py py-const docutils literal notranslate"><span class="pre">FloatOperation</span></code></a>.</p>
 | ||
| <p>For each signal there is a flag and a trap enabler.  When a signal is
 | ||
| encountered, its flag is set to one, then, if the trap enabler is
 | ||
| set to one, an exception is raised.  Flags are sticky, so the user needs to
 | ||
| reset them before monitoring a calculation.</p>
 | ||
| <div class="admonition seealso">
 | ||
| <p class="admonition-title">See also</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>IBM’s General Decimal Arithmetic Specification, <a class="reference external" href="https://speleotrove.com/decimal/decarith.html">The General Decimal Arithmetic
 | ||
| Specification</a>.</p></li>
 | ||
| </ul>
 | ||
| </div>
 | ||
| <section id="quick-start-tutorial">
 | ||
| <span id="decimal-tutorial"></span><h2>Quick-start Tutorial<a class="headerlink" href="#quick-start-tutorial" title="Link to this heading">¶</a></h2>
 | ||
| <p>The usual start to using decimals is importing the module, viewing the current
 | ||
| context with <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a> and, if necessary, setting new values for
 | ||
| precision, rounding, or enabled traps:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span>
 | ||
| <span class="go">Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,</span>
 | ||
| <span class="go">        capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,</span>
 | ||
| <span class="go">        InvalidOperation])</span>
 | ||
| 
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">7</span>       <span class="c1"># Set a new precision</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Decimal instances can be constructed from integers, strings, floats, or tuples.
 | ||
| Construction from an integer or a float performs an exact conversion of the
 | ||
| value of that integer or float.  Decimal numbers include special values such as
 | ||
| <code class="docutils literal notranslate"><span class="pre">NaN</span></code> which stands for “Not a number”, positive and negative
 | ||
| <code class="docutils literal notranslate"><span class="pre">Infinity</span></code>, and <code class="docutils literal notranslate"><span class="pre">-0</span></code>:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">28</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('10')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.14'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.14')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mf">3.14</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.140000000000000124344978758017532527446746826171875')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span> <span class="o">-</span><span class="mi">2</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('3.14')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="mf">2.0</span> <span class="o">**</span> <span class="mf">0.5</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('1.4142135623730951')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">**</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'0.5'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('1.414213562373095048801688724')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'NaN'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('NaN')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'-Infinity'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('-Infinity')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>If the <a class="reference internal" href="#decimal.FloatOperation" title="decimal.FloatOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FloatOperation</span></code></a> signal is trapped, accidental mixing of
 | ||
| decimals and floats in constructors or ordering comparisons raises
 | ||
| an exception:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">c</span> <span class="o">=</span> <span class="n">getcontext</span><span class="p">()</span>
 | ||
| <span class="gp">>>> </span><span class="n">c</span><span class="o">.</span><span class="n">traps</span><span class="p">[</span><span class="n">FloatOperation</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mf">3.14</span><span class="p">)</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
 | ||
| <span class="gr">decimal.FloatOperation</span>: <span class="n">[<class 'decimal.FloatOperation'>]</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.5'</span><span class="p">)</span> <span class="o"><</span> <span class="mf">3.7</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
 | ||
| <span class="gr">decimal.FloatOperation</span>: <span class="n">[<class 'decimal.FloatOperation'>]</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.5'</span><span class="p">)</span> <span class="o">==</span> <span class="mf">3.5</span>
 | ||
| <span class="go">True</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.3.</span></p>
 | ||
| </div>
 | ||
| <p>The significance of a new Decimal is determined solely by the number of digits
 | ||
| input.  Context precision and rounding only come into play during arithmetic
 | ||
| operations.</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">6</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.0'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.0')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.1415926535'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.1415926535')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.1415926535'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'2.7182818285'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('5.85987')</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">rounding</span> <span class="o">=</span> <span class="n">ROUND_UP</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.1415926535'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'2.7182818285'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('5.85988')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>If the internal limits of the C version are exceeded, constructing
 | ||
| a decimal raises <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-class docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a>:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s2">"1e9999999999999999999"</span><span class="p">)</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
 | ||
| <span class="gr">decimal.InvalidOperation</span>: <span class="n">[<class 'decimal.InvalidOperation'>]</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.3.</span></p>
 | ||
| </div>
 | ||
| <p>Decimals interact well with much of the rest of Python.  Here is a small decimal
 | ||
| floating-point flying circus:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">data</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">Decimal</span><span class="p">,</span> <span class="s1">'1.34 1.87 3.45 2.35 1.00 0.03 9.25'</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
 | ||
| <span class="gp">>>> </span><span class="nb">max</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('9.25')</span>
 | ||
| <span class="gp">>>> </span><span class="nb">min</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.03')</span>
 | ||
| <span class="gp">>>> </span><span class="nb">sorted</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
 | ||
| <span class="go">[Decimal('0.03'), Decimal('1.00'), Decimal('1.34'), Decimal('1.87'),</span>
 | ||
| <span class="go"> Decimal('2.35'), Decimal('3.45'), Decimal('9.25')]</span>
 | ||
| <span class="gp">>>> </span><span class="nb">sum</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('19.29')</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span> <span class="o">=</span> <span class="n">data</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span>
 | ||
| <span class="gp">>>> </span><span class="nb">str</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
 | ||
| <span class="go">'1.34'</span>
 | ||
| <span class="gp">>>> </span><span class="nb">float</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
 | ||
| <span class="go">1.34</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('1.3')</span>
 | ||
| <span class="gp">>>> </span><span class="nb">int</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
 | ||
| <span class="go">1</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span> <span class="o">*</span> <span class="mi">5</span>
 | ||
| <span class="go">Decimal('6.70')</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span>
 | ||
| <span class="go">Decimal('2.5058')</span>
 | ||
| <span class="gp">>>> </span><span class="n">c</span> <span class="o">%</span> <span class="n">a</span>
 | ||
| <span class="go">Decimal('0.77')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>And some mathematical functions are also available to Decimal:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">28</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">sqrt</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('1.414213562373095048801688724')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">exp</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('2.718281828459045235360287471')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'10'</span><span class="p">)</span><span class="o">.</span><span class="n">ln</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('2.302585092994045684017991455')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'10'</span><span class="p">)</span><span class="o">.</span><span class="n">log10</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('1')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The <a class="reference internal" href="#decimal.Decimal.quantize" title="decimal.Decimal.quantize"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantize()</span></code></a> method rounds a number to a fixed exponent.  This method is
 | ||
| useful for monetary applications that often round results to a fixed number of
 | ||
| places:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'7.325'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'.01'</span><span class="p">),</span> <span class="n">rounding</span><span class="o">=</span><span class="n">ROUND_DOWN</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('7.32')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'7.325'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.'</span><span class="p">),</span> <span class="n">rounding</span><span class="o">=</span><span class="n">ROUND_UP</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('8')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>As shown above, the <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a> function accesses the current context and
 | ||
| allows the settings to be changed.  This approach meets the needs of most
 | ||
| applications.</p>
 | ||
| <p>For more advanced work, it may be useful to create alternate contexts using the
 | ||
| Context() constructor.  To make an alternate active, use the <a class="reference internal" href="#decimal.setcontext" title="decimal.setcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">setcontext()</span></code></a>
 | ||
| function.</p>
 | ||
| <p>In accordance with the standard, the <a class="reference internal" href="#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> module provides two ready to
 | ||
| use standard contexts, <a class="reference internal" href="#decimal.BasicContext" title="decimal.BasicContext"><code class="xref py py-const docutils literal notranslate"><span class="pre">BasicContext</span></code></a> and <a class="reference internal" href="#decimal.ExtendedContext" title="decimal.ExtendedContext"><code class="xref py py-const docutils literal notranslate"><span class="pre">ExtendedContext</span></code></a>. The
 | ||
| former is especially useful for debugging because many of the traps are
 | ||
| enabled:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">myothercontext</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">60</span><span class="p">,</span> <span class="n">rounding</span><span class="o">=</span><span class="n">ROUND_HALF_DOWN</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">myothercontext</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.142857142857142857142857142857142857142857142857142857142857')</span>
 | ||
| 
 | ||
| <span class="gp">>>> </span><span class="n">ExtendedContext</span>
 | ||
| <span class="go">Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,</span>
 | ||
| <span class="go">        capitals=1, clamp=0, flags=[], traps=[])</span>
 | ||
| <span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">ExtendedContext</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.142857143')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('Infinity')</span>
 | ||
| 
 | ||
| <span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">BasicContext</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<pyshell#143>"</span>, line <span class="m">1</span>, in <span class="n">-toplevel-</span>
 | ||
| <span class="w">    </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="gr">DivisionByZero</span>: <span class="n">x / 0</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Contexts also have signal flags for monitoring exceptional conditions
 | ||
| encountered during computations.  The flags remain set until explicitly cleared,
 | ||
| so it is best to clear the flags before each set of monitored computations by
 | ||
| using the <a class="reference internal" href="#decimal.Context.clear_flags" title="decimal.Context.clear_flags"><code class="xref py py-meth docutils literal notranslate"><span class="pre">clear_flags()</span></code></a> method.</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">ExtendedContext</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">clear_flags</span><span class="p">()</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">355</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">113</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.14159292')</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span>
 | ||
| <span class="go">Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,</span>
 | ||
| <span class="go">        capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[])</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The <em>flags</em> entry shows that the rational approximation to pi was
 | ||
| rounded (digits beyond the context precision were thrown away) and that the
 | ||
| result is inexact (some of the discarded digits were non-zero).</p>
 | ||
| <p>Individual traps are set using the dictionary in the <code class="xref py py-attr docutils literal notranslate"><span class="pre">traps</span></code>
 | ||
| attribute of a context:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">ExtendedContext</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('Infinity')</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">traps</span><span class="p">[</span><span class="n">DivisionByZero</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<pyshell#112>"</span>, line <span class="m">1</span>, in <span class="n">-toplevel-</span>
 | ||
| <span class="w">    </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
 | ||
| <span class="gr">DivisionByZero</span>: <span class="n">x / 0</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Most programs adjust the current context only once, at the beginning of the
 | ||
| program.  And, in many applications, data is converted to <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> with
 | ||
| a single cast inside a loop.  With context set and decimals created, the bulk of
 | ||
| the program manipulates the data no differently than with other Python numeric
 | ||
| types.</p>
 | ||
| </section>
 | ||
| <section id="decimal-objects">
 | ||
| <span id="decimal-decimal"></span><h2>Decimal objects<a class="headerlink" href="#decimal-objects" title="Link to this heading">¶</a></h2>
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Decimal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'0'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Construct a new <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> object based from <em>value</em>.</p>
 | ||
| <p><em>value</em> can be an integer, string, tuple, <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>, or another <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>
 | ||
| object. If no <em>value</em> is given, returns <code class="docutils literal notranslate"><span class="pre">Decimal('0')</span></code>.  If <em>value</em> is a
 | ||
| string, it should conform to the decimal numeric string syntax after leading
 | ||
| and trailing whitespace characters, as well as underscores throughout, are removed:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">sign</span>           <span class="p">:</span><span class="o">:=</span>  <span class="s1">'+'</span> <span class="o">|</span> <span class="s1">'-'</span>
 | ||
| <span class="n">digit</span>          <span class="p">:</span><span class="o">:=</span>  <span class="s1">'0'</span> <span class="o">|</span> <span class="s1">'1'</span> <span class="o">|</span> <span class="s1">'2'</span> <span class="o">|</span> <span class="s1">'3'</span> <span class="o">|</span> <span class="s1">'4'</span> <span class="o">|</span> <span class="s1">'5'</span> <span class="o">|</span> <span class="s1">'6'</span> <span class="o">|</span> <span class="s1">'7'</span> <span class="o">|</span> <span class="s1">'8'</span> <span class="o">|</span> <span class="s1">'9'</span>
 | ||
| <span class="n">indicator</span>      <span class="p">:</span><span class="o">:=</span>  <span class="s1">'e'</span> <span class="o">|</span> <span class="s1">'E'</span>
 | ||
| <span class="n">digits</span>         <span class="p">:</span><span class="o">:=</span>  <span class="n">digit</span> <span class="p">[</span><span class="n">digit</span><span class="p">]</span><span class="o">...</span>
 | ||
| <span class="n">decimal</span><span class="o">-</span><span class="n">part</span>   <span class="p">:</span><span class="o">:=</span>  <span class="n">digits</span> <span class="s1">'.'</span> <span class="p">[</span><span class="n">digits</span><span class="p">]</span> <span class="o">|</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]</span> <span class="n">digits</span>
 | ||
| <span class="n">exponent</span><span class="o">-</span><span class="n">part</span>  <span class="p">:</span><span class="o">:=</span>  <span class="n">indicator</span> <span class="p">[</span><span class="n">sign</span><span class="p">]</span> <span class="n">digits</span>
 | ||
| <span class="n">infinity</span>       <span class="p">:</span><span class="o">:=</span>  <span class="s1">'Infinity'</span> <span class="o">|</span> <span class="s1">'Inf'</span>
 | ||
| <span class="n">nan</span>            <span class="p">:</span><span class="o">:=</span>  <span class="s1">'NaN'</span> <span class="p">[</span><span class="n">digits</span><span class="p">]</span> <span class="o">|</span> <span class="s1">'sNaN'</span> <span class="p">[</span><span class="n">digits</span><span class="p">]</span>
 | ||
| <span class="n">numeric</span><span class="o">-</span><span class="n">value</span>  <span class="p">:</span><span class="o">:=</span>  <span class="n">decimal</span><span class="o">-</span><span class="n">part</span> <span class="p">[</span><span class="n">exponent</span><span class="o">-</span><span class="n">part</span><span class="p">]</span> <span class="o">|</span> <span class="n">infinity</span>
 | ||
| <span class="n">numeric</span><span class="o">-</span><span class="n">string</span> <span class="p">:</span><span class="o">:=</span>  <span class="p">[</span><span class="n">sign</span><span class="p">]</span> <span class="n">numeric</span><span class="o">-</span><span class="n">value</span> <span class="o">|</span> <span class="p">[</span><span class="n">sign</span><span class="p">]</span> <span class="n">nan</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Other Unicode decimal digits are also permitted where <code class="docutils literal notranslate"><span class="pre">digit</span></code>
 | ||
| appears above.  These include decimal digits from various other
 | ||
| alphabets (for example, Arabic-Indic and Devanāgarī digits) along
 | ||
| with the fullwidth digits <code class="docutils literal notranslate"><span class="pre">'\uff10'</span></code> through <code class="docutils literal notranslate"><span class="pre">'\uff19'</span></code>.</p>
 | ||
| <p>If <em>value</em> is a <a class="reference internal" href="stdtypes.html#tuple" title="tuple"><code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></a>, it should have three components, a sign
 | ||
| (<code class="docutils literal notranslate"><span class="pre">0</span></code> for positive or <code class="docutils literal notranslate"><span class="pre">1</span></code> for negative), a <a class="reference internal" href="stdtypes.html#tuple" title="tuple"><code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></a> of
 | ||
| digits, and an integer exponent. For example, <code class="docutils literal notranslate"><span class="pre">Decimal((0,</span> <span class="pre">(1,</span> <span class="pre">4,</span> <span class="pre">1,</span> <span class="pre">4),</span> <span class="pre">-3))</span></code>
 | ||
| returns <code class="docutils literal notranslate"><span class="pre">Decimal('1.414')</span></code>.</p>
 | ||
| <p>If <em>value</em> is a <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>, the binary floating-point value is losslessly
 | ||
| converted to its exact decimal equivalent.  This conversion can often require
 | ||
| 53 or more digits of precision.  For example, <code class="docutils literal notranslate"><span class="pre">Decimal(float('1.1'))</span></code>
 | ||
| converts to
 | ||
| <code class="docutils literal notranslate"><span class="pre">Decimal('1.100000000000000088817841970012523233890533447265625')</span></code>.</p>
 | ||
| <p>The <em>context</em> precision does not affect how many digits are stored. That is
 | ||
| determined exclusively by the number of digits in <em>value</em>. For example,
 | ||
| <code class="docutils literal notranslate"><span class="pre">Decimal('3.00000')</span></code> records all five zeros even if the context precision is
 | ||
| only three.</p>
 | ||
| <p>The purpose of the <em>context</em> argument is determining what to do if <em>value</em> is a
 | ||
| malformed string.  If the context traps <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-const docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a>, an exception
 | ||
| is raised; otherwise, the constructor returns a new Decimal with the value of
 | ||
| <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.</p>
 | ||
| <p>Once constructed, <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> objects are immutable.</p>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.2: </span>The argument to the constructor is now permitted to be a <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>
 | ||
| instance.</p>
 | ||
| </div>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.3: </span><a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a> arguments raise an exception if the <a class="reference internal" href="#decimal.FloatOperation" title="decimal.FloatOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FloatOperation</span></code></a>
 | ||
| trap is set. By default the trap is off.</p>
 | ||
| </div>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.6: </span>Underscores are allowed for grouping, as with integral and floating-point
 | ||
| literals in code.</p>
 | ||
| </div>
 | ||
| <p>Decimal floating-point objects share many properties with the other built-in
 | ||
| numeric types such as <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a> and <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>.  All of the usual math
 | ||
| operations and special methods apply.  Likewise, decimal objects can be
 | ||
| copied, pickled, printed, used as dictionary keys, used as set elements,
 | ||
| compared, sorted, and coerced to another type (such as <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a> or
 | ||
| <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>).</p>
 | ||
| <p>There are some small differences between arithmetic on Decimal objects and
 | ||
| arithmetic on integers and floats.  When the remainder operator <code class="docutils literal notranslate"><span class="pre">%</span></code> is
 | ||
| applied to Decimal objects, the sign of the result is the sign of the
 | ||
| <em>dividend</em> rather than the sign of the divisor:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="p">(</span><span class="o">-</span><span class="mi">7</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
 | ||
| <span class="go">1</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">7</span><span class="p">)</span> <span class="o">%</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('-3')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The integer division operator <code class="docutils literal notranslate"><span class="pre">//</span></code> behaves analogously, returning the
 | ||
| integer part of the true quotient (truncating towards zero) rather than its
 | ||
| floor, so as to preserve the usual identity <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">==</span> <span class="pre">(x</span> <span class="pre">//</span> <span class="pre">y)</span> <span class="pre">*</span> <span class="pre">y</span> <span class="pre">+</span> <span class="pre">x</span> <span class="pre">%</span> <span class="pre">y</span></code>:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="o">-</span><span class="mi">7</span> <span class="o">//</span> <span class="mi">4</span>
 | ||
| <span class="go">-2</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">7</span><span class="p">)</span> <span class="o">//</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('-1')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">%</span></code> and <code class="docutils literal notranslate"><span class="pre">//</span></code> operators implement the <code class="docutils literal notranslate"><span class="pre">remainder</span></code> and
 | ||
| <code class="docutils literal notranslate"><span class="pre">divide-integer</span></code> operations (respectively) as described in the
 | ||
| specification.</p>
 | ||
| <p>Decimal objects cannot generally be combined with floats or
 | ||
| instances of <a class="reference internal" href="fractions.html#fractions.Fraction" title="fractions.Fraction"><code class="xref py py-class docutils literal notranslate"><span class="pre">fractions.Fraction</span></code></a> in arithmetic operations:
 | ||
| an attempt to add a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> to a <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>, for
 | ||
| example, will raise a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a>.  However, it is possible to
 | ||
| use Python’s comparison operators to compare a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>
 | ||
| instance <code class="docutils literal notranslate"><span class="pre">x</span></code> with another number <code class="docutils literal notranslate"><span class="pre">y</span></code>.  This avoids confusing results
 | ||
| when doing equality comparisons between numbers of different types.</p>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.2: </span>Mixed-type comparisons between <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instances and other
 | ||
| numeric types are now fully supported.</p>
 | ||
| </div>
 | ||
| <p>In addition to the standard numeric properties, decimal floating-point
 | ||
| objects also have a number of specialized methods:</p>
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.adjusted">
 | ||
| <span class="sig-name descname"><span class="pre">adjusted</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.adjusted" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the adjusted exponent after shifting out the coefficient’s
 | ||
| rightmost digits until only the lead digit remains:
 | ||
| <code class="docutils literal notranslate"><span class="pre">Decimal('321e+5').adjusted()</span></code> returns seven.  Used for determining the
 | ||
| position of the most significant digit with respect to the decimal point.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.as_integer_ratio">
 | ||
| <span class="sig-name descname"><span class="pre">as_integer_ratio</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.as_integer_ratio" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a pair <code class="docutils literal notranslate"><span class="pre">(n,</span> <span class="pre">d)</span></code> of integers that represent the given
 | ||
| <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance as a fraction, in lowest terms and
 | ||
| with a positive denominator:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'-3.14'</span><span class="p">)</span><span class="o">.</span><span class="n">as_integer_ratio</span><span class="p">()</span>
 | ||
| <span class="go">(-157, 50)</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The conversion is exact.  Raise OverflowError on infinities and ValueError
 | ||
| on NaNs.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.6.</span></p>
 | ||
| </div>
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.as_tuple">
 | ||
| <span class="sig-name descname"><span class="pre">as_tuple</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.as_tuple" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a <a class="reference internal" href="../glossary.html#term-named-tuple"><span class="xref std std-term">named tuple</span></a> representation of the number:
 | ||
| <code class="docutils literal notranslate"><span class="pre">DecimalTuple(sign,</span> <span class="pre">digits,</span> <span class="pre">exponent)</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.canonical">
 | ||
| <span class="sig-name descname"><span class="pre">canonical</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.canonical" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the canonical encoding of the argument.  Currently, the encoding of
 | ||
| a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance is always canonical, so this operation returns
 | ||
| its argument unchanged.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.compare">
 | ||
| <span class="sig-name descname"><span class="pre">compare</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.compare" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compare the values of two Decimal instances.  <a class="reference internal" href="#decimal.Decimal.compare" title="decimal.Decimal.compare"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare()</span></code></a> returns a
 | ||
| Decimal instance, and if either operand is a NaN then the result is a
 | ||
| NaN:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">a</span> <span class="ow">or</span> <span class="n">b</span> <span class="ow">is</span> <span class="n">a</span> <span class="n">NaN</span>  <span class="o">==></span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'NaN'</span><span class="p">)</span>
 | ||
| <span class="n">a</span> <span class="o"><</span> <span class="n">b</span>            <span class="o">==></span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'-1'</span><span class="p">)</span>
 | ||
| <span class="n">a</span> <span class="o">==</span> <span class="n">b</span>           <span class="o">==></span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'0'</span><span class="p">)</span>
 | ||
| <span class="n">a</span> <span class="o">></span> <span class="n">b</span>            <span class="o">==></span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'1'</span><span class="p">)</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.compare_signal">
 | ||
| <span class="sig-name descname"><span class="pre">compare_signal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.compare_signal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>This operation is identical to the <a class="reference internal" href="#decimal.Decimal.compare" title="decimal.Decimal.compare"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare()</span></code></a> method, except that all
 | ||
| NaNs signal.  That is, if neither operand is a signaling NaN then any
 | ||
| quiet NaN operand is treated as though it were a signaling NaN.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.compare_total">
 | ||
| <span class="sig-name descname"><span class="pre">compare_total</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.compare_total" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compare two operands using their abstract representation rather than their
 | ||
| numerical value.  Similar to the <a class="reference internal" href="#decimal.Decimal.compare" title="decimal.Decimal.compare"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare()</span></code></a> method, but the result
 | ||
| gives a total ordering on <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instances.  Two
 | ||
| <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instances with the same numeric value but different
 | ||
| representations compare unequal in this ordering:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'12.0'</span><span class="p">)</span><span class="o">.</span><span class="n">compare_total</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'12'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('-1')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Quiet and signaling NaNs are also included in the total ordering.  The
 | ||
| result of this function is <code class="docutils literal notranslate"><span class="pre">Decimal('0')</span></code> if both operands have the same
 | ||
| representation, <code class="docutils literal notranslate"><span class="pre">Decimal('-1')</span></code> if the first operand is lower in the
 | ||
| total order than the second, and <code class="docutils literal notranslate"><span class="pre">Decimal('1')</span></code> if the first operand is
 | ||
| higher in the total order than the second operand.  See the specification
 | ||
| for details of the total order.</p>
 | ||
| <p>This operation is unaffected by context and is quiet: no flags are changed
 | ||
| and no rounding is performed.  As an exception, the C version may raise
 | ||
| InvalidOperation if the second operand cannot be converted exactly.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.compare_total_mag">
 | ||
| <span class="sig-name descname"><span class="pre">compare_total_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.compare_total_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compare two operands using their abstract representation rather than their
 | ||
| value as in <a class="reference internal" href="#decimal.Decimal.compare_total" title="decimal.Decimal.compare_total"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare_total()</span></code></a>, but ignoring the sign of each operand.
 | ||
| <code class="docutils literal notranslate"><span class="pre">x.compare_total_mag(y)</span></code> is equivalent to
 | ||
| <code class="docutils literal notranslate"><span class="pre">x.copy_abs().compare_total(y.copy_abs())</span></code>.</p>
 | ||
| <p>This operation is unaffected by context and is quiet: no flags are changed
 | ||
| and no rounding is performed.  As an exception, the C version may raise
 | ||
| InvalidOperation if the second operand cannot be converted exactly.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.conjugate">
 | ||
| <span class="sig-name descname"><span class="pre">conjugate</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.conjugate" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Just returns self, this method is only to comply with the Decimal
 | ||
| Specification.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.copy_abs">
 | ||
| <span class="sig-name descname"><span class="pre">copy_abs</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.copy_abs" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the absolute value of the argument.  This operation is unaffected
 | ||
| by the context and is quiet: no flags are changed and no rounding is
 | ||
| performed.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.copy_negate">
 | ||
| <span class="sig-name descname"><span class="pre">copy_negate</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.copy_negate" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the negation of the argument.  This operation is unaffected by the
 | ||
| context and is quiet: no flags are changed and no rounding is performed.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.copy_sign">
 | ||
| <span class="sig-name descname"><span class="pre">copy_sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.copy_sign" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a copy of the first operand with the sign set to be the same as the
 | ||
| sign of the second operand.  For example:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'2.3'</span><span class="p">)</span><span class="o">.</span><span class="n">copy_sign</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'-1.5'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('-2.3')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>This operation is unaffected by context and is quiet: no flags are changed
 | ||
| and no rounding is performed.  As an exception, the C version may raise
 | ||
| InvalidOperation if the second operand cannot be converted exactly.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.exp">
 | ||
| <span class="sig-name descname"><span class="pre">exp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.exp" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the value of the (natural) exponential function <code class="docutils literal notranslate"><span class="pre">e**x</span></code> at the
 | ||
| given number.  The result is correctly rounded using the
 | ||
| <a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a> rounding mode.</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">exp</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('2.718281828459045235360287471')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">321</span><span class="p">)</span><span class="o">.</span><span class="n">exp</span><span class="p">()</span>
 | ||
| <span class="go">Decimal('2.561702493119680037517373933E+139')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.from_float">
 | ||
| <em class="property"><span class="k"><span class="pre">classmethod</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_float</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.from_float" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Alternative constructor that only accepts instances of <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a> or
 | ||
| <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>.</p>
 | ||
| <p>Note <code class="docutils literal notranslate"><span class="pre">Decimal.from_float(0.1)</span></code> is not the same as <code class="docutils literal notranslate"><span class="pre">Decimal('0.1')</span></code>.
 | ||
| Since 0.1 is not exactly representable in binary floating point, the
 | ||
| value is stored as the nearest representable value which is
 | ||
| <code class="docutils literal notranslate"><span class="pre">0x1.999999999999ap-4</span></code>.  That equivalent value in decimal is
 | ||
| <code class="docutils literal notranslate"><span class="pre">0.1000000000000000055511151231257827021181583404541015625</span></code>.</p>
 | ||
| <div class="admonition note">
 | ||
| <p class="admonition-title">Note</p>
 | ||
| <p>From Python 3.2 onwards, a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance
 | ||
| can also be constructed directly from a <a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>.</p>
 | ||
| </div>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="o">.</span><span class="n">from_float</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.1000000000000000055511151231257827021181583404541015625')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="o">.</span><span class="n">from_float</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="s1">'nan'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('NaN')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="o">.</span><span class="n">from_float</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="s1">'inf'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('Infinity')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="o">.</span><span class="n">from_float</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="s1">'-inf'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('-Infinity')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.1.</span></p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.fma">
 | ||
| <span class="sig-name descname"><span class="pre">fma</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">third</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.fma" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Fused multiply-add.  Return self*other+third with no rounding of the
 | ||
| intermediate product self*other.</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">fma</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('11')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_canonical">
 | ||
| <span class="sig-name descname"><span class="pre">is_canonical</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_canonical" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is canonical and <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a>
 | ||
| otherwise.  Currently, a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance is always canonical, so
 | ||
| this operation always returns <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_finite">
 | ||
| <span class="sig-name descname"><span class="pre">is_finite</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_finite" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a finite number, and
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> if the argument is an infinity or a NaN.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_infinite">
 | ||
| <span class="sig-name descname"><span class="pre">is_infinite</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_infinite" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is either positive or negative
 | ||
| infinity and <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_nan">
 | ||
| <span class="sig-name descname"><span class="pre">is_nan</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_nan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a (quiet or signaling) NaN and
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_normal">
 | ||
| <span class="sig-name descname"><span class="pre">is_normal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_normal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a <em>normal</em> finite number.  Return
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> if the argument is zero, subnormal, infinite or a NaN.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_qnan">
 | ||
| <span class="sig-name descname"><span class="pre">is_qnan</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_qnan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a quiet NaN, and
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_signed">
 | ||
| <span class="sig-name descname"><span class="pre">is_signed</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_signed" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument has a negative sign and
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> otherwise.  Note that zeros and NaNs can both carry signs.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_snan">
 | ||
| <span class="sig-name descname"><span class="pre">is_snan</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_snan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a signaling NaN and <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a>
 | ||
| otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_subnormal">
 | ||
| <span class="sig-name descname"><span class="pre">is_subnormal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_subnormal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is subnormal, and <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a>
 | ||
| otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.is_zero">
 | ||
| <span class="sig-name descname"><span class="pre">is_zero</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.is_zero" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a> if the argument is a (positive or negative) zero and
 | ||
| <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> otherwise.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.ln">
 | ||
| <span class="sig-name descname"><span class="pre">ln</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.ln" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the natural (base e) logarithm of the operand.  The result is
 | ||
| correctly rounded using the <a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a> rounding mode.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.log10">
 | ||
| <span class="sig-name descname"><span class="pre">log10</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.log10" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the base ten logarithm of the operand.  The result is correctly
 | ||
| rounded using the <a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a> rounding mode.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.logb">
 | ||
| <span class="sig-name descname"><span class="pre">logb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.logb" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>For a nonzero number, return the adjusted exponent of its operand as a
 | ||
| <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance.  If the operand is a zero then
 | ||
| <code class="docutils literal notranslate"><span class="pre">Decimal('-Infinity')</span></code> is returned and the <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-const docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a> flag
 | ||
| is raised.  If the operand is an infinity then <code class="docutils literal notranslate"><span class="pre">Decimal('Infinity')</span></code> is
 | ||
| returned.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.logical_and">
 | ||
| <span class="sig-name descname"><span class="pre">logical_and</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.logical_and" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p><a class="reference internal" href="#decimal.Decimal.logical_and" title="decimal.Decimal.logical_and"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_and()</span></code></a> is a logical operation which takes two <em>logical
 | ||
| operands</em> (see <a class="reference internal" href="#logical-operands-label"><span class="std std-ref">Logical operands</span></a>).  The result is the
 | ||
| digit-wise <code class="docutils literal notranslate"><span class="pre">and</span></code> of the two operands.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.logical_invert">
 | ||
| <span class="sig-name descname"><span class="pre">logical_invert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.logical_invert" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p><a class="reference internal" href="#decimal.Decimal.logical_invert" title="decimal.Decimal.logical_invert"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_invert()</span></code></a> is a logical operation.  The
 | ||
| result is the digit-wise inversion of the operand.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.logical_or">
 | ||
| <span class="sig-name descname"><span class="pre">logical_or</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.logical_or" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p><a class="reference internal" href="#decimal.Decimal.logical_or" title="decimal.Decimal.logical_or"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_or()</span></code></a> is a logical operation which takes two <em>logical
 | ||
| operands</em> (see <a class="reference internal" href="#logical-operands-label"><span class="std std-ref">Logical operands</span></a>).  The result is the
 | ||
| digit-wise <code class="docutils literal notranslate"><span class="pre">or</span></code> of the two operands.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.logical_xor">
 | ||
| <span class="sig-name descname"><span class="pre">logical_xor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.logical_xor" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p><a class="reference internal" href="#decimal.Decimal.logical_xor" title="decimal.Decimal.logical_xor"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_xor()</span></code></a> is a logical operation which takes two <em>logical
 | ||
| operands</em> (see <a class="reference internal" href="#logical-operands-label"><span class="std std-ref">Logical operands</span></a>).  The result is the
 | ||
| digit-wise exclusive or of the two operands.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.max">
 | ||
| <span class="sig-name descname"><span class="pre">max</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.max" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Like <code class="docutils literal notranslate"><span class="pre">max(self,</span> <span class="pre">other)</span></code> except that the context rounding rule is applied
 | ||
| before returning and that <code class="docutils literal notranslate"><span class="pre">NaN</span></code> values are either signaled or
 | ||
| ignored (depending on the context and whether they are signaling or
 | ||
| quiet).</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.max_mag">
 | ||
| <span class="sig-name descname"><span class="pre">max_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.max_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Similar to the <a class="reference internal" href="#decimal.Decimal.max" title="decimal.Decimal.max"><code class="xref py py-meth docutils literal notranslate"><span class="pre">max()</span></code></a> method, but the comparison is done using the
 | ||
| absolute values of the operands.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.min">
 | ||
| <span class="sig-name descname"><span class="pre">min</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.min" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Like <code class="docutils literal notranslate"><span class="pre">min(self,</span> <span class="pre">other)</span></code> except that the context rounding rule is applied
 | ||
| before returning and that <code class="docutils literal notranslate"><span class="pre">NaN</span></code> values are either signaled or
 | ||
| ignored (depending on the context and whether they are signaling or
 | ||
| quiet).</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.min_mag">
 | ||
| <span class="sig-name descname"><span class="pre">min_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.min_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Similar to the <a class="reference internal" href="#decimal.Decimal.min" title="decimal.Decimal.min"><code class="xref py py-meth docutils literal notranslate"><span class="pre">min()</span></code></a> method, but the comparison is done using the
 | ||
| absolute values of the operands.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.next_minus">
 | ||
| <span class="sig-name descname"><span class="pre">next_minus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.next_minus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the largest number representable in the given context (or in the
 | ||
| current thread’s context if no context is given) that is smaller than the
 | ||
| given operand.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.next_plus">
 | ||
| <span class="sig-name descname"><span class="pre">next_plus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.next_plus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the smallest number representable in the given context (or in the
 | ||
| current thread’s context if no context is given) that is larger than the
 | ||
| given operand.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.next_toward">
 | ||
| <span class="sig-name descname"><span class="pre">next_toward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.next_toward" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>If the two operands are unequal, return the number closest to the first
 | ||
| operand in the direction of the second operand.  If both operands are
 | ||
| numerically equal, return a copy of the first operand with the sign set to
 | ||
| be the same as the sign of the second operand.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.normalize">
 | ||
| <span class="sig-name descname"><span class="pre">normalize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.normalize" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Used for producing canonical values of an equivalence
 | ||
| class within either the current context or the specified context.</p>
 | ||
| <p>This has the same semantics as the unary plus operation, except that if
 | ||
| the final result is finite it is reduced to its simplest form, with all
 | ||
| trailing zeros removed and its sign preserved. That is, while the
 | ||
| coefficient is non-zero and a multiple of ten the coefficient is divided
 | ||
| by ten and the exponent is incremented by 1. Otherwise (the coefficient is
 | ||
| zero) the exponent is set to 0. In all cases the sign is unchanged.</p>
 | ||
| <p>For example, <code class="docutils literal notranslate"><span class="pre">Decimal('32.100')</span></code> and <code class="docutils literal notranslate"><span class="pre">Decimal('0.321000e+2')</span></code> both
 | ||
| normalize to the equivalent value <code class="docutils literal notranslate"><span class="pre">Decimal('32.1')</span></code>.</p>
 | ||
| <p>Note that rounding is applied <em>before</em> reducing to simplest form.</p>
 | ||
| <p>In the latest versions of the specification, this operation is also known
 | ||
| as <code class="docutils literal notranslate"><span class="pre">reduce</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.number_class">
 | ||
| <span class="sig-name descname"><span class="pre">number_class</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.number_class" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a string describing the <em>class</em> of the operand.  The returned value
 | ||
| is one of the following ten strings.</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"-Infinity"</span></code>, indicating that the operand is negative infinity.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"-Normal"</span></code>, indicating that the operand is a negative normal number.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"-Subnormal"</span></code>, indicating that the operand is negative and subnormal.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"-Zero"</span></code>, indicating that the operand is a negative zero.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"+Zero"</span></code>, indicating that the operand is a positive zero.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"+Subnormal"</span></code>, indicating that the operand is positive and subnormal.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"+Normal"</span></code>, indicating that the operand is a positive normal number.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"+Infinity"</span></code>, indicating that the operand is positive infinity.</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"NaN"</span></code>, indicating that the operand is a quiet NaN (Not a Number).</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">"sNaN"</span></code>, indicating that the operand is a signaling NaN.</p></li>
 | ||
| </ul>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.quantize">
 | ||
| <span class="sig-name descname"><span class="pre">quantize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">exp</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rounding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.quantize" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a value equal to the first operand after rounding and having the
 | ||
| exponent of the second operand.</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.41421356'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.000'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('1.414')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Unlike other operations, if the length of the coefficient after the
 | ||
| quantize operation would be greater than precision, then an
 | ||
| <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-const docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a> is signaled. This guarantees that, unless there
 | ||
| is an error condition, the quantized exponent is always equal to that of
 | ||
| the right-hand operand.</p>
 | ||
| <p>Also unlike other operations, quantize never signals Underflow, even if
 | ||
| the result is subnormal and inexact.</p>
 | ||
| <p>If the exponent of the second operand is larger than that of the first
 | ||
| then rounding may be necessary.  In this case, the rounding mode is
 | ||
| determined by the <code class="docutils literal notranslate"><span class="pre">rounding</span></code> argument if given, else by the given
 | ||
| <code class="docutils literal notranslate"><span class="pre">context</span></code> argument; if neither argument is given the rounding mode of
 | ||
| the current thread’s context is used.</p>
 | ||
| <p>An error is returned whenever the resulting exponent is greater than
 | ||
| <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emax</span></code> or less than <a class="reference internal" href="#decimal.Context.Etiny" title="decimal.Context.Etiny"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Etiny()</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.radix">
 | ||
| <span class="sig-name descname"><span class="pre">radix</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.radix" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <code class="docutils literal notranslate"><span class="pre">Decimal(10)</span></code>, the radix (base) in which the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>
 | ||
| class does all its arithmetic.  Included for compatibility with the
 | ||
| specification.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.remainder_near">
 | ||
| <span class="sig-name descname"><span class="pre">remainder_near</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.remainder_near" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the remainder from dividing <em>self</em> by <em>other</em>.  This differs from
 | ||
| <code class="docutils literal notranslate"><span class="pre">self</span> <span class="pre">%</span> <span class="pre">other</span></code> in that the sign of the remainder is chosen so as to
 | ||
| minimize its absolute value.  More precisely, the return value is
 | ||
| <code class="docutils literal notranslate"><span class="pre">self</span> <span class="pre">-</span> <span class="pre">n</span> <span class="pre">*</span> <span class="pre">other</span></code> where <code class="docutils literal notranslate"><span class="pre">n</span></code> is the integer nearest to the exact
 | ||
| value of <code class="docutils literal notranslate"><span class="pre">self</span> <span class="pre">/</span> <span class="pre">other</span></code>, and if two integers are equally near then the
 | ||
| even one is chosen.</p>
 | ||
| <p>If the result is zero then its sign will be the sign of <em>self</em>.</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">18</span><span class="p">)</span><span class="o">.</span><span class="n">remainder_near</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('-2')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">25</span><span class="p">)</span><span class="o">.</span><span class="n">remainder_near</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('5')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">35</span><span class="p">)</span><span class="o">.</span><span class="n">remainder_near</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('-5')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.rotate">
 | ||
| <span class="sig-name descname"><span class="pre">rotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.rotate" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the result of rotating the digits of the first operand by an amount
 | ||
| specified by the second operand.  The second operand must be an integer in
 | ||
| the range -precision through precision.  The absolute value of the second
 | ||
| operand gives the number of places to rotate.  If the second operand is
 | ||
| positive then rotation is to the left; otherwise rotation is to the right.
 | ||
| The coefficient of the first operand is padded on the left with zeros to
 | ||
| length precision if necessary.  The sign and exponent of the first operand
 | ||
| are unchanged.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.same_quantum">
 | ||
| <span class="sig-name descname"><span class="pre">same_quantum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.same_quantum" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Test whether self and other have the same exponent or whether both are
 | ||
| <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.</p>
 | ||
| <p>This operation is unaffected by context and is quiet: no flags are changed
 | ||
| and no rounding is performed.  As an exception, the C version may raise
 | ||
| InvalidOperation if the second operand cannot be converted exactly.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.scaleb">
 | ||
| <span class="sig-name descname"><span class="pre">scaleb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.scaleb" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the first operand with exponent adjusted by the second.
 | ||
| Equivalently, return the first operand multiplied by <code class="docutils literal notranslate"><span class="pre">10**other</span></code>.  The
 | ||
| second operand must be an integer.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.shift">
 | ||
| <span class="sig-name descname"><span class="pre">shift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.shift" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the result of shifting the digits of the first operand by an amount
 | ||
| specified by the second operand.  The second operand must be an integer in
 | ||
| the range -precision through precision.  The absolute value of the second
 | ||
| operand gives the number of places to shift.  If the second operand is
 | ||
| positive then the shift is to the left; otherwise the shift is to the
 | ||
| right.  Digits shifted into the coefficient are zeros.  The sign and
 | ||
| exponent of the first operand are unchanged.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.sqrt">
 | ||
| <span class="sig-name descname"><span class="pre">sqrt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.sqrt" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the square root of the argument to full precision.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.to_eng_string">
 | ||
| <span class="sig-name descname"><span class="pre">to_eng_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.to_eng_string" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Convert to a string, using engineering notation if an exponent is needed.</p>
 | ||
| <p>Engineering notation has an exponent which is a multiple of 3.  This
 | ||
| can leave up to 3 digits to the left of the decimal place and may
 | ||
| require the addition of either one or two trailing zeros.</p>
 | ||
| <p>For example, this converts <code class="docutils literal notranslate"><span class="pre">Decimal('123E+1')</span></code> to <code class="docutils literal notranslate"><span class="pre">Decimal('1.23E+3')</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.to_integral">
 | ||
| <span class="sig-name descname"><span class="pre">to_integral</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rounding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.to_integral" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Identical to the <a class="reference internal" href="#decimal.Decimal.to_integral_value" title="decimal.Decimal.to_integral_value"><code class="xref py py-meth docutils literal notranslate"><span class="pre">to_integral_value()</span></code></a> method.  The <code class="docutils literal notranslate"><span class="pre">to_integral</span></code>
 | ||
| name has been kept for compatibility with older versions.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.to_integral_exact">
 | ||
| <span class="sig-name descname"><span class="pre">to_integral_exact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rounding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.to_integral_exact" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round to the nearest integer, signaling <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-const docutils literal notranslate"><span class="pre">Inexact</span></code></a> or
 | ||
| <a class="reference internal" href="#decimal.Rounded" title="decimal.Rounded"><code class="xref py py-const docutils literal notranslate"><span class="pre">Rounded</span></code></a> as appropriate if rounding occurs.  The rounding mode is
 | ||
| determined by the <code class="docutils literal notranslate"><span class="pre">rounding</span></code> parameter if given, else by the given
 | ||
| <code class="docutils literal notranslate"><span class="pre">context</span></code>.  If neither parameter is given then the rounding mode of the
 | ||
| current context is used.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Decimal.to_integral_value">
 | ||
| <span class="sig-name descname"><span class="pre">to_integral_value</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">rounding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">context</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Decimal.to_integral_value" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round to the nearest integer without signaling <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-const docutils literal notranslate"><span class="pre">Inexact</span></code></a> or
 | ||
| <a class="reference internal" href="#decimal.Rounded" title="decimal.Rounded"><code class="xref py py-const docutils literal notranslate"><span class="pre">Rounded</span></code></a>.  If given, applies <em>rounding</em>; otherwise, uses the
 | ||
| rounding method in either the supplied <em>context</em> or the current context.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>Decimal numbers can be rounded using the <a class="reference internal" href="functions.html#round" title="round"><code class="xref py py-func docutils literal notranslate"><span class="pre">round()</span></code></a> function:</p>
 | ||
| <dl class="describe">
 | ||
| <dt class="sig sig-object">
 | ||
| <span class="sig-name descname"><span class="pre">round(number)</span></span></dt>
 | ||
| <dd></dd></dl>
 | ||
| 
 | ||
| <dl class="describe">
 | ||
| <dt class="sig sig-object">
 | ||
| <span class="sig-name descname"><span class="pre">round(number,</span> <span class="pre">ndigits)</span></span></dt>
 | ||
| <dd><p>If <em>ndigits</em> is not given or <code class="docutils literal notranslate"><span class="pre">None</span></code>,
 | ||
| returns the nearest <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to <em>number</em>,
 | ||
| rounding ties to even, and ignoring the rounding mode of the
 | ||
| <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> context.  Raises <a class="reference internal" href="exceptions.html#OverflowError" title="OverflowError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OverflowError</span></code></a> if <em>number</em> is an
 | ||
| infinity or <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if it is a (quiet or signaling) NaN.</p>
 | ||
| <p>If <em>ndigits</em> is an <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>, the context’s rounding mode is respected
 | ||
| and a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> representing <em>number</em> rounded to the nearest
 | ||
| multiple of <code class="docutils literal notranslate"><span class="pre">Decimal('1E-ndigits')</span></code> is returned; in this case,
 | ||
| <code class="docutils literal notranslate"><span class="pre">round(number,</span> <span class="pre">ndigits)</span></code> is equivalent to
 | ||
| <code class="docutils literal notranslate"><span class="pre">self.quantize(Decimal('1E-ndigits'))</span></code>.  Returns <code class="docutils literal notranslate"><span class="pre">Decimal('NaN')</span></code> if
 | ||
| <em>number</em> is a quiet NaN.  Raises <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-class docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a> if <em>number</em>
 | ||
| is an infinity, a signaling NaN, or if the length of the coefficient after
 | ||
| the quantize operation would be greater than the current context’s
 | ||
| precision.  In other words, for the non-corner cases:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>if <em>ndigits</em> is positive, return <em>number</em> rounded to <em>ndigits</em> decimal
 | ||
| places;</p></li>
 | ||
| <li><p>if <em>ndigits</em> is zero, return <em>number</em> rounded to the nearest integer;</p></li>
 | ||
| <li><p>if <em>ndigits</em> is negative, return <em>number</em> rounded to the nearest
 | ||
| multiple of <code class="docutils literal notranslate"><span class="pre">10**abs(ndigits)</span></code>.</p></li>
 | ||
| </ul>
 | ||
| <p>For example:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="n">Decimal</span><span class="p">,</span> <span class="n">getcontext</span><span class="p">,</span> <span class="n">ROUND_DOWN</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">rounding</span> <span class="o">=</span> <span class="n">ROUND_DOWN</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.75'</span><span class="p">))</span>     <span class="c1"># context rounding ignored</span>
 | ||
| <span class="go">4</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.5'</span><span class="p">))</span>      <span class="c1"># round-ties-to-even</span>
 | ||
| <span class="go">4</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.75'</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>  <span class="c1"># uses the context rounding</span>
 | ||
| <span class="go">Decimal('3')</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.75'</span><span class="p">),</span> <span class="mi">1</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.7')</span>
 | ||
| <span class="gp">>>> </span><span class="nb">round</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.75'</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0E+1')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <section id="logical-operands">
 | ||
| <span id="logical-operands-label"></span><h3>Logical operands<a class="headerlink" href="#logical-operands" title="Link to this heading">¶</a></h3>
 | ||
| <p>The <a class="reference internal" href="#decimal.Decimal.logical_and" title="decimal.Decimal.logical_and"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_and()</span></code></a>, <a class="reference internal" href="#decimal.Decimal.logical_invert" title="decimal.Decimal.logical_invert"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_invert()</span></code></a>, <a class="reference internal" href="#decimal.Decimal.logical_or" title="decimal.Decimal.logical_or"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_or()</span></code></a>,
 | ||
| and <a class="reference internal" href="#decimal.Decimal.logical_xor" title="decimal.Decimal.logical_xor"><code class="xref py py-meth docutils literal notranslate"><span class="pre">logical_xor()</span></code></a> methods expect their arguments to be <em>logical
 | ||
| operands</em>.  A <em>logical operand</em> is a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance whose
 | ||
| exponent and sign are both zero, and whose digits are all either
 | ||
| <code class="docutils literal notranslate"><span class="pre">0</span></code> or <code class="docutils literal notranslate"><span class="pre">1</span></code>.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="context-objects">
 | ||
| <span id="decimal-context"></span><h2>Context objects<a class="headerlink" href="#context-objects" title="Link to this heading">¶</a></h2>
 | ||
| <p>Contexts are environments for arithmetic operations.  They govern precision, set
 | ||
| rules for rounding, determine which signals are treated as exceptions, and limit
 | ||
| the range for exponents.</p>
 | ||
| <p>Each thread has its own current context which is accessed or changed using the
 | ||
| <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a> and <a class="reference internal" href="#decimal.setcontext" title="decimal.setcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">setcontext()</span></code></a> functions:</p>
 | ||
| <dl class="py function">
 | ||
| <dt class="sig sig-object py" id="decimal.getcontext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">getcontext</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.getcontext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the current context for the active thread.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py function">
 | ||
| <dt class="sig sig-object py" id="decimal.setcontext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">setcontext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">c</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.setcontext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Set the current context for the active thread to <em>c</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>You can also use the <a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">with</span></code></a> statement and the <a class="reference internal" href="#decimal.localcontext" title="decimal.localcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">localcontext()</span></code></a>
 | ||
| function to temporarily change the active context.</p>
 | ||
| <dl class="py function">
 | ||
| <dt class="sig sig-object py" id="decimal.localcontext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">localcontext</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.localcontext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a context manager that will set the current context for the active thread
 | ||
| to a copy of <em>ctx</em> on entry to the with-statement and restore the previous context
 | ||
| when exiting the with-statement. If no context is specified, a copy of the
 | ||
| current context is used.  The <em>kwargs</em> argument is used to set the attributes
 | ||
| of the new context.</p>
 | ||
| <p>For example, the following code sets the current decimal precision to 42 places,
 | ||
| performs a calculation, and then automatically restores the previous context:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="n">localcontext</span>
 | ||
| 
 | ||
| <span class="k">with</span> <span class="n">localcontext</span><span class="p">()</span> <span class="k">as</span> <span class="n">ctx</span><span class="p">:</span>
 | ||
|     <span class="n">ctx</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">42</span>   <span class="c1"># Perform a high precision calculation</span>
 | ||
|     <span class="n">s</span> <span class="o">=</span> <span class="n">calculate_something</span><span class="p">()</span>
 | ||
| <span class="n">s</span> <span class="o">=</span> <span class="o">+</span><span class="n">s</span>  <span class="c1"># Round the final result back to the default precision</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Using keyword arguments, the code would be the following:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="n">localcontext</span>
 | ||
| 
 | ||
| <span class="k">with</span> <span class="n">localcontext</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span> <span class="k">as</span> <span class="n">ctx</span><span class="p">:</span>
 | ||
|     <span class="n">s</span> <span class="o">=</span> <span class="n">calculate_something</span><span class="p">()</span>
 | ||
| <span class="n">s</span> <span class="o">=</span> <span class="o">+</span><span class="n">s</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Raises <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> if <em>kwargs</em> supplies an attribute that <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> doesn’t
 | ||
| support.  Raises either <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> or <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> if <em>kwargs</em> supplies an
 | ||
| invalid value for an attribute.</p>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.11: </span><a class="reference internal" href="#decimal.localcontext" title="decimal.localcontext"><code class="xref py py-meth docutils literal notranslate"><span class="pre">localcontext()</span></code></a> now supports setting context attributes through the use of keyword arguments.</p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>New contexts can also be created using the <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> constructor
 | ||
| described below. In addition, the module provides three pre-made contexts:</p>
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.BasicContext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">BasicContext</span></span><a class="headerlink" href="#decimal.BasicContext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>This is a standard context defined by the General Decimal Arithmetic
 | ||
| Specification.  Precision is set to nine.  Rounding is set to
 | ||
| <a class="reference internal" href="#decimal.ROUND_HALF_UP" title="decimal.ROUND_HALF_UP"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_UP</span></code></a>.  All flags are cleared.  All traps are enabled (treated
 | ||
| as exceptions) except <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-const docutils literal notranslate"><span class="pre">Inexact</span></code></a>, <a class="reference internal" href="#decimal.Rounded" title="decimal.Rounded"><code class="xref py py-const docutils literal notranslate"><span class="pre">Rounded</span></code></a>, and
 | ||
| <a class="reference internal" href="#decimal.Subnormal" title="decimal.Subnormal"><code class="xref py py-const docutils literal notranslate"><span class="pre">Subnormal</span></code></a>.</p>
 | ||
| <p>Because many of the traps are enabled, this context is useful for debugging.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ExtendedContext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ExtendedContext</span></span><a class="headerlink" href="#decimal.ExtendedContext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>This is a standard context defined by the General Decimal Arithmetic
 | ||
| Specification.  Precision is set to nine.  Rounding is set to
 | ||
| <a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a>.  All flags are cleared.  No traps are enabled (so that
 | ||
| exceptions are not raised during computations).</p>
 | ||
| <p>Because the traps are disabled, this context is useful for applications that
 | ||
| prefer to have result value of <code class="docutils literal notranslate"><span class="pre">NaN</span></code> or <code class="docutils literal notranslate"><span class="pre">Infinity</span></code> instead of
 | ||
| raising exceptions.  This allows an application to complete a run in the
 | ||
| presence of conditions that would otherwise halt the program.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.DefaultContext">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">DefaultContext</span></span><a class="headerlink" href="#decimal.DefaultContext" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>This context is used by the <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> constructor as a prototype for new
 | ||
| contexts.  Changing a field (such a precision) has the effect of changing the
 | ||
| default for new contexts created by the <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> constructor.</p>
 | ||
| <p>This context is most useful in multi-threaded environments.  Changing one of the
 | ||
| fields before threads are started has the effect of setting system-wide
 | ||
| defaults.  Changing the fields after threads have started is not recommended as
 | ||
| it would require thread synchronization to prevent race conditions.</p>
 | ||
| <p>In single threaded environments, it is preferable to not use this context at
 | ||
| all.  Instead, simply create contexts explicitly as described below.</p>
 | ||
| <p>The default values are <code class="xref py py-attr docutils literal notranslate"><span class="pre">Context.prec</span></code>=<code class="docutils literal notranslate"><span class="pre">28</span></code>,
 | ||
| <code class="xref py py-attr docutils literal notranslate"><span class="pre">Context.rounding</span></code>=<a class="reference internal" href="#decimal.ROUND_HALF_EVEN" title="decimal.ROUND_HALF_EVEN"><code class="xref py py-const docutils literal notranslate"><span class="pre">ROUND_HALF_EVEN</span></code></a>,
 | ||
| and enabled traps for <a class="reference internal" href="#decimal.Overflow" title="decimal.Overflow"><code class="xref py py-class docutils literal notranslate"><span class="pre">Overflow</span></code></a>, <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-class docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a>, and
 | ||
| <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-class docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>In addition to the three supplied contexts, new contexts can be created with the
 | ||
| <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> constructor.</p>
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Context">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Context</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">prec</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rounding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Emin</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">Emax</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">capitals</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">clamp</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">flags</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">traps</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Creates a new context.  If a field is not specified or is <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>, the
 | ||
| default values are copied from the <a class="reference internal" href="#decimal.DefaultContext" title="decimal.DefaultContext"><code class="xref py py-const docutils literal notranslate"><span class="pre">DefaultContext</span></code></a>.  If the <em>flags</em>
 | ||
| field is not specified or is <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>, all flags are cleared.</p>
 | ||
| <p><em>prec</em> is an integer in the range [<code class="docutils literal notranslate"><span class="pre">1</span></code>, <a class="reference internal" href="#decimal.MAX_PREC" title="decimal.MAX_PREC"><code class="xref py py-const docutils literal notranslate"><span class="pre">MAX_PREC</span></code></a>] that sets
 | ||
| the precision for arithmetic operations in the context.</p>
 | ||
| <p>The <em>rounding</em> option is one of the constants listed in the section
 | ||
| <a class="reference internal" href="#rounding-modes">Rounding Modes</a>.</p>
 | ||
| <p>The <em>traps</em> and <em>flags</em> fields list any signals to be set. Generally, new
 | ||
| contexts should only set traps and leave the flags clear.</p>
 | ||
| <p>The <em>Emin</em> and <em>Emax</em> fields are integers specifying the outer limits allowable
 | ||
| for exponents. <em>Emin</em> must be in the range [<a class="reference internal" href="#decimal.MIN_EMIN" title="decimal.MIN_EMIN"><code class="xref py py-const docutils literal notranslate"><span class="pre">MIN_EMIN</span></code></a>, <code class="docutils literal notranslate"><span class="pre">0</span></code>],
 | ||
| <em>Emax</em> in the range [<code class="docutils literal notranslate"><span class="pre">0</span></code>, <a class="reference internal" href="#decimal.MAX_EMAX" title="decimal.MAX_EMAX"><code class="xref py py-const docutils literal notranslate"><span class="pre">MAX_EMAX</span></code></a>].</p>
 | ||
| <p>The <em>capitals</em> field is either <code class="docutils literal notranslate"><span class="pre">0</span></code> or <code class="docutils literal notranslate"><span class="pre">1</span></code> (the default). If set to
 | ||
| <code class="docutils literal notranslate"><span class="pre">1</span></code>, exponents are printed with a capital <code class="docutils literal notranslate"><span class="pre">E</span></code>; otherwise, a
 | ||
| lowercase <code class="docutils literal notranslate"><span class="pre">e</span></code> is used: <code class="docutils literal notranslate"><span class="pre">Decimal('6.02e+23')</span></code>.</p>
 | ||
| <p>The <em>clamp</em> field is either <code class="docutils literal notranslate"><span class="pre">0</span></code> (the default) or <code class="docutils literal notranslate"><span class="pre">1</span></code>.
 | ||
| If set to <code class="docutils literal notranslate"><span class="pre">1</span></code>, the exponent <code class="docutils literal notranslate"><span class="pre">e</span></code> of a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>
 | ||
| instance representable in this context is strictly limited to the
 | ||
| range <code class="docutils literal notranslate"><span class="pre">Emin</span> <span class="pre">-</span> <span class="pre">prec</span> <span class="pre">+</span> <span class="pre">1</span> <span class="pre"><=</span> <span class="pre">e</span> <span class="pre"><=</span> <span class="pre">Emax</span> <span class="pre">-</span> <span class="pre">prec</span> <span class="pre">+</span> <span class="pre">1</span></code>.  If <em>clamp</em> is
 | ||
| <code class="docutils literal notranslate"><span class="pre">0</span></code> then a weaker condition holds: the adjusted exponent of
 | ||
| the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance is at most <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emax</span></code>.  When <em>clamp</em> is
 | ||
| <code class="docutils literal notranslate"><span class="pre">1</span></code>, a large normal number will, where possible, have its
 | ||
| exponent reduced and a corresponding number of zeros added to its
 | ||
| coefficient, in order to fit the exponent constraints; this
 | ||
| preserves the value of the number but loses information about
 | ||
| significant trailing zeros.  For example:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">6</span><span class="p">,</span> <span class="n">Emax</span><span class="o">=</span><span class="mi">999</span><span class="p">,</span> <span class="n">clamp</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">create_decimal</span><span class="p">(</span><span class="s1">'1.23e999'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('1.23000E+999')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>A <em>clamp</em> value of <code class="docutils literal notranslate"><span class="pre">1</span></code> allows compatibility with the
 | ||
| fixed-width decimal interchange formats specified in IEEE 754.</p>
 | ||
| <p>The <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> class defines several general purpose methods as well as
 | ||
| a large number of methods for doing arithmetic directly in a given context.
 | ||
| In addition, for each of the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> methods described above (with
 | ||
| the exception of the <a class="reference internal" href="#decimal.Decimal.adjusted" title="decimal.Decimal.adjusted"><code class="xref py py-meth docutils literal notranslate"><span class="pre">adjusted()</span></code></a> and <a class="reference internal" href="#decimal.Decimal.as_tuple" title="decimal.Decimal.as_tuple"><code class="xref py py-meth docutils literal notranslate"><span class="pre">as_tuple()</span></code></a> methods) there is
 | ||
| a corresponding <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> method.  For example, for a <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a>
 | ||
| instance <code class="docutils literal notranslate"><span class="pre">C</span></code> and <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> instance <code class="docutils literal notranslate"><span class="pre">x</span></code>, <code class="docutils literal notranslate"><span class="pre">C.exp(x)</span></code> is
 | ||
| equivalent to <code class="docutils literal notranslate"><span class="pre">x.exp(context=C)</span></code>.  Each <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> method accepts a
 | ||
| Python integer (an instance of <a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a>) anywhere that a
 | ||
| Decimal instance is accepted.</p>
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.clear_flags">
 | ||
| <span class="sig-name descname"><span class="pre">clear_flags</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.clear_flags" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Resets all of the flags to <code class="docutils literal notranslate"><span class="pre">0</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.clear_traps">
 | ||
| <span class="sig-name descname"><span class="pre">clear_traps</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.clear_traps" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Resets all of the traps to <code class="docutils literal notranslate"><span class="pre">0</span></code>.</p>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.3.</span></p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.copy">
 | ||
| <span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.copy" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a duplicate of the context.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.copy_decimal">
 | ||
| <span class="sig-name descname"><span class="pre">copy_decimal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">num</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.copy_decimal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return a copy of the Decimal instance num.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.create_decimal">
 | ||
| <span class="sig-name descname"><span class="pre">create_decimal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">num</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.create_decimal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Creates a new Decimal instance from <em>num</em> but using <em>self</em> as
 | ||
| context. Unlike the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> constructor, the context precision,
 | ||
| rounding method, flags, and traps are applied to the conversion.</p>
 | ||
| <p>This is useful because constants are often given to a greater precision
 | ||
| than is needed by the application.  Another benefit is that rounding
 | ||
| immediately eliminates unintended effects from digits beyond the current
 | ||
| precision. In the following example, using unrounded inputs means that
 | ||
| adding zero to a sum can change the result:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">3</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.4445'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.0023'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('4.45')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.4445'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.0023'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('4.44')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>This method implements the to-number operation of the IBM specification.
 | ||
| If the argument is a string, no leading or trailing whitespace or
 | ||
| underscores are permitted.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.create_decimal_from_float">
 | ||
| <span class="sig-name descname"><span class="pre">create_decimal_from_float</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.create_decimal_from_float" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Creates a new Decimal instance from a float <em>f</em> but rounding using <em>self</em>
 | ||
| as the context.  Unlike the <a class="reference internal" href="#decimal.Decimal.from_float" title="decimal.Decimal.from_float"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Decimal.from_float()</span></code></a> class method,
 | ||
| the context precision, rounding method, flags, and traps are applied to
 | ||
| the conversion.</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">rounding</span><span class="o">=</span><span class="n">ROUND_DOWN</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">context</span><span class="o">.</span><span class="n">create_decimal_from_float</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.1415')</span>
 | ||
| <span class="gp">>>> </span><span class="n">context</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">traps</span><span class="o">=</span><span class="p">[</span><span class="n">Inexact</span><span class="p">])</span>
 | ||
| <span class="gp">>>> </span><span class="n">context</span><span class="o">.</span><span class="n">create_decimal_from_float</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
| <span class="w">    </span><span class="o">...</span>
 | ||
| <span class="gr">decimal.Inexact</span>: <span class="n">None</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.1.</span></p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.Etiny">
 | ||
| <span class="sig-name descname"><span class="pre">Etiny</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.Etiny" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a value equal to <code class="docutils literal notranslate"><span class="pre">Emin</span> <span class="pre">-</span> <span class="pre">prec</span> <span class="pre">+</span> <span class="pre">1</span></code> which is the minimum exponent
 | ||
| value for subnormal results.  When underflow occurs, the exponent is set
 | ||
| to <a class="reference internal" href="#decimal.Context.Etiny" title="decimal.Context.Etiny"><code class="xref py py-const docutils literal notranslate"><span class="pre">Etiny</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.Etop">
 | ||
| <span class="sig-name descname"><span class="pre">Etop</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.Etop" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a value equal to <code class="docutils literal notranslate"><span class="pre">Emax</span> <span class="pre">-</span> <span class="pre">prec</span> <span class="pre">+</span> <span class="pre">1</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>The usual approach to working with decimals is to create <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>
 | ||
| instances and then apply arithmetic operations which take place within the
 | ||
| current context for the active thread.  An alternative approach is to use
 | ||
| context methods for calculating within a specific context.  The methods are
 | ||
| similar to those for the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> class and are only briefly
 | ||
| recounted here.</p>
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.abs">
 | ||
| <span class="sig-name descname"><span class="pre">abs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.abs" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the absolute value of <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.add">
 | ||
| <span class="sig-name descname"><span class="pre">add</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.add" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the sum of <em>x</em> and <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.canonical">
 | ||
| <span class="sig-name descname"><span class="pre">canonical</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.canonical" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the same Decimal object <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.compare">
 | ||
| <span class="sig-name descname"><span class="pre">compare</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.compare" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares <em>x</em> and <em>y</em> numerically.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.compare_signal">
 | ||
| <span class="sig-name descname"><span class="pre">compare_signal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.compare_signal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares the values of the two operands numerically.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.compare_total">
 | ||
| <span class="sig-name descname"><span class="pre">compare_total</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.compare_total" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares two operands using their abstract representation.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.compare_total_mag">
 | ||
| <span class="sig-name descname"><span class="pre">compare_total_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.compare_total_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares two operands using their abstract representation, ignoring sign.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.copy_abs">
 | ||
| <span class="sig-name descname"><span class="pre">copy_abs</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.copy_abs" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a copy of <em>x</em> with the sign set to 0.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.copy_negate">
 | ||
| <span class="sig-name descname"><span class="pre">copy_negate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.copy_negate" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a copy of <em>x</em> with the sign inverted.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.copy_sign">
 | ||
| <span class="sig-name descname"><span class="pre">copy_sign</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.copy_sign" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Copies the sign from <em>y</em> to <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.divide">
 | ||
| <span class="sig-name descname"><span class="pre">divide</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.divide" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <em>x</em> divided by <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.divide_int">
 | ||
| <span class="sig-name descname"><span class="pre">divide_int</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.divide_int" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <em>x</em> divided by <em>y</em>, truncated to an integer.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.divmod">
 | ||
| <span class="sig-name descname"><span class="pre">divmod</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.divmod" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Divides two numbers and returns the integer part of the result.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.exp">
 | ||
| <span class="sig-name descname"><span class="pre">exp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.exp" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">e</span> <span class="pre">**</span> <span class="pre">x</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.fma">
 | ||
| <span class="sig-name descname"><span class="pre">fma</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">z</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.fma" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <em>x</em> multiplied by <em>y</em>, plus <em>z</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_canonical">
 | ||
| <span class="sig-name descname"><span class="pre">is_canonical</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_canonical" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is canonical; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_finite">
 | ||
| <span class="sig-name descname"><span class="pre">is_finite</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_finite" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is finite; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_infinite">
 | ||
| <span class="sig-name descname"><span class="pre">is_infinite</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_infinite" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is infinite; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_nan">
 | ||
| <span class="sig-name descname"><span class="pre">is_nan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_nan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is a qNaN or sNaN; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_normal">
 | ||
| <span class="sig-name descname"><span class="pre">is_normal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_normal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is a normal number; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_qnan">
 | ||
| <span class="sig-name descname"><span class="pre">is_qnan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_qnan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is a quiet NaN; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_signed">
 | ||
| <span class="sig-name descname"><span class="pre">is_signed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_signed" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is negative; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_snan">
 | ||
| <span class="sig-name descname"><span class="pre">is_snan</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_snan" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is a signaling NaN; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_subnormal">
 | ||
| <span class="sig-name descname"><span class="pre">is_subnormal</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_subnormal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is subnormal; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.is_zero">
 | ||
| <span class="sig-name descname"><span class="pre">is_zero</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.is_zero" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>x</em> is a zero; otherwise returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.ln">
 | ||
| <span class="sig-name descname"><span class="pre">ln</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.ln" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the natural (base e) logarithm of <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.log10">
 | ||
| <span class="sig-name descname"><span class="pre">log10</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.log10" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the base 10 logarithm of <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.logb">
 | ||
| <span class="sig-name descname"><span class="pre">logb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.logb" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the exponent of the magnitude of the operand’s MSD.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.logical_and">
 | ||
| <span class="sig-name descname"><span class="pre">logical_and</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.logical_and" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Applies the logical operation <em>and</em> between each operand’s digits.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.logical_invert">
 | ||
| <span class="sig-name descname"><span class="pre">logical_invert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.logical_invert" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Invert all the digits in <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.logical_or">
 | ||
| <span class="sig-name descname"><span class="pre">logical_or</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.logical_or" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Applies the logical operation <em>or</em> between each operand’s digits.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.logical_xor">
 | ||
| <span class="sig-name descname"><span class="pre">logical_xor</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.logical_xor" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Applies the logical operation <em>xor</em> between each operand’s digits.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.max">
 | ||
| <span class="sig-name descname"><span class="pre">max</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.max" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares two values numerically and returns the maximum.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.max_mag">
 | ||
| <span class="sig-name descname"><span class="pre">max_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.max_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares the values numerically with their sign ignored.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.min">
 | ||
| <span class="sig-name descname"><span class="pre">min</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.min" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares two values numerically and returns the minimum.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.min_mag">
 | ||
| <span class="sig-name descname"><span class="pre">min_mag</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.min_mag" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Compares the values numerically with their sign ignored.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.minus">
 | ||
| <span class="sig-name descname"><span class="pre">minus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.minus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Minus corresponds to the unary prefix minus operator in Python.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.multiply">
 | ||
| <span class="sig-name descname"><span class="pre">multiply</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.multiply" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the product of <em>x</em> and <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.next_minus">
 | ||
| <span class="sig-name descname"><span class="pre">next_minus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.next_minus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the largest representable number smaller than <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.next_plus">
 | ||
| <span class="sig-name descname"><span class="pre">next_plus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.next_plus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the smallest representable number larger than <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.next_toward">
 | ||
| <span class="sig-name descname"><span class="pre">next_toward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.next_toward" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the number closest to <em>x</em>, in direction towards <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.normalize">
 | ||
| <span class="sig-name descname"><span class="pre">normalize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.normalize" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Reduces <em>x</em> to its simplest form.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.number_class">
 | ||
| <span class="sig-name descname"><span class="pre">number_class</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.number_class" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns an indication of the class of <em>x</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.plus">
 | ||
| <span class="sig-name descname"><span class="pre">plus</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.plus" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Plus corresponds to the unary prefix plus operator in Python.  This
 | ||
| operation applies the context precision and rounding, so it is <em>not</em> an
 | ||
| identity operation.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.power">
 | ||
| <span class="sig-name descname"><span class="pre">power</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">modulo</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.power" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return <code class="docutils literal notranslate"><span class="pre">x</span></code> to the power of <code class="docutils literal notranslate"><span class="pre">y</span></code>, reduced modulo <code class="docutils literal notranslate"><span class="pre">modulo</span></code> if given.</p>
 | ||
| <p>With two arguments, compute <code class="docutils literal notranslate"><span class="pre">x**y</span></code>.  If <code class="docutils literal notranslate"><span class="pre">x</span></code> is negative then <code class="docutils literal notranslate"><span class="pre">y</span></code>
 | ||
| must be integral.  The result will be inexact unless <code class="docutils literal notranslate"><span class="pre">y</span></code> is integral and
 | ||
| the result is finite and can be expressed exactly in ‘precision’ digits.
 | ||
| The rounding mode of the context is used. Results are always correctly rounded
 | ||
| in the Python version.</p>
 | ||
| <p><code class="docutils literal notranslate"><span class="pre">Decimal(0)</span> <span class="pre">**</span> <span class="pre">Decimal(0)</span></code> results in <code class="docutils literal notranslate"><span class="pre">InvalidOperation</span></code>, and if <code class="docutils literal notranslate"><span class="pre">InvalidOperation</span></code>
 | ||
| is not trapped, then results in <code class="docutils literal notranslate"><span class="pre">Decimal('NaN')</span></code>.</p>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.3: </span>The C module computes <a class="reference internal" href="#decimal.Context.power" title="decimal.Context.power"><code class="xref py py-meth docutils literal notranslate"><span class="pre">power()</span></code></a> in terms of the correctly rounded
 | ||
| <a class="reference internal" href="#decimal.Context.exp" title="decimal.Context.exp"><code class="xref py py-meth docutils literal notranslate"><span class="pre">exp()</span></code></a> and <a class="reference internal" href="#decimal.Context.ln" title="decimal.Context.ln"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ln()</span></code></a> functions. The result is well-defined but
 | ||
| only “almost always correctly rounded”.</p>
 | ||
| </div>
 | ||
| <p>With three arguments, compute <code class="docutils literal notranslate"><span class="pre">(x**y)</span> <span class="pre">%</span> <span class="pre">modulo</span></code>.  For the three argument
 | ||
| form, the following restrictions on the arguments hold:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>all three arguments must be integral</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">y</span></code> must be nonnegative</p></li>
 | ||
| <li><p>at least one of <code class="docutils literal notranslate"><span class="pre">x</span></code> or <code class="docutils literal notranslate"><span class="pre">y</span></code> must be nonzero</p></li>
 | ||
| <li><p><code class="docutils literal notranslate"><span class="pre">modulo</span></code> must be nonzero and have at most ‘precision’ digits</p></li>
 | ||
| </ul>
 | ||
| <p>The value resulting from <code class="docutils literal notranslate"><span class="pre">Context.power(x,</span> <span class="pre">y,</span> <span class="pre">modulo)</span></code> is
 | ||
| equal to the value that would be obtained by computing <code class="docutils literal notranslate"><span class="pre">(x**y)</span>
 | ||
| <span class="pre">%</span> <span class="pre">modulo</span></code> with unbounded precision, but is computed more
 | ||
| efficiently.  The exponent of the result is zero, regardless of
 | ||
| the exponents of <code class="docutils literal notranslate"><span class="pre">x</span></code>, <code class="docutils literal notranslate"><span class="pre">y</span></code> and <code class="docutils literal notranslate"><span class="pre">modulo</span></code>.  The result is
 | ||
| always exact.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.quantize">
 | ||
| <span class="sig-name descname"><span class="pre">quantize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.quantize" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a value equal to <em>x</em> (rounded), having the exponent of <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.radix">
 | ||
| <span class="sig-name descname"><span class="pre">radix</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.radix" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Just returns 10, as this is Decimal, :)</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.remainder">
 | ||
| <span class="sig-name descname"><span class="pre">remainder</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.remainder" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the remainder from integer division.</p>
 | ||
| <p>The sign of the result, if non-zero, is the same as that of the original
 | ||
| dividend.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.remainder_near">
 | ||
| <span class="sig-name descname"><span class="pre">remainder_near</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.remainder_near" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">-</span> <span class="pre">y</span> <span class="pre">*</span> <span class="pre">n</span></code>, where <em>n</em> is the integer nearest the exact value
 | ||
| of <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">/</span> <span class="pre">y</span></code> (if the result is 0 then its sign will be the sign of <em>x</em>).</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.rotate">
 | ||
| <span class="sig-name descname"><span class="pre">rotate</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.rotate" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a rotated copy of <em>x</em>, <em>y</em> times.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.same_quantum">
 | ||
| <span class="sig-name descname"><span class="pre">same_quantum</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.same_quantum" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns <code class="docutils literal notranslate"><span class="pre">True</span></code> if the two operands have the same exponent.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.scaleb">
 | ||
| <span class="sig-name descname"><span class="pre">scaleb</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.scaleb" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns the first operand after adding the second value its exp.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.shift">
 | ||
| <span class="sig-name descname"><span class="pre">shift</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.shift" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Returns a shifted copy of <em>x</em>, <em>y</em> times.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.sqrt">
 | ||
| <span class="sig-name descname"><span class="pre">sqrt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.sqrt" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Square root of a non-negative number to context precision.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.subtract">
 | ||
| <span class="sig-name descname"><span class="pre">subtract</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.subtract" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Return the difference between <em>x</em> and <em>y</em>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.to_eng_string">
 | ||
| <span class="sig-name descname"><span class="pre">to_eng_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.to_eng_string" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Convert to a string, using engineering notation if an exponent is needed.</p>
 | ||
| <p>Engineering notation has an exponent which is a multiple of 3.  This
 | ||
| can leave up to 3 digits to the left of the decimal place and may
 | ||
| require the addition of either one or two trailing zeros.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.to_integral_exact">
 | ||
| <span class="sig-name descname"><span class="pre">to_integral_exact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.to_integral_exact" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Rounds to an integer.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py method">
 | ||
| <dt class="sig sig-object py" id="decimal.Context.to_sci_string">
 | ||
| <span class="sig-name descname"><span class="pre">to_sci_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#decimal.Context.to_sci_string" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Converts a number to a string using scientific notation.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </section>
 | ||
| <section id="constants">
 | ||
| <span id="decimal-rounding-modes"></span><h2>Constants<a class="headerlink" href="#constants" title="Link to this heading">¶</a></h2>
 | ||
| <p>The constants in this section are only relevant for the C module. They
 | ||
| are also included in the pure Python version for compatibility.</p>
 | ||
| <table class="docutils align-default">
 | ||
| <thead>
 | ||
| <tr class="row-odd"><th class="head"></th>
 | ||
| <th class="head"><p>32-bit</p></th>
 | ||
| <th class="head"><p>64-bit</p></th>
 | ||
| </tr>
 | ||
| </thead>
 | ||
| <tbody>
 | ||
| <tr class="row-even"><td><dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.MAX_PREC">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">MAX_PREC</span></span><a class="headerlink" href="#decimal.MAX_PREC" title="Link to this definition">¶</a></dt>
 | ||
| <dd></dd></dl>
 | ||
| 
 | ||
| </td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">425000000</span></code></p></td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">999999999999999999</span></code></p></td>
 | ||
| </tr>
 | ||
| <tr class="row-odd"><td><dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.MAX_EMAX">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">MAX_EMAX</span></span><a class="headerlink" href="#decimal.MAX_EMAX" title="Link to this definition">¶</a></dt>
 | ||
| <dd></dd></dl>
 | ||
| 
 | ||
| </td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">425000000</span></code></p></td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">999999999999999999</span></code></p></td>
 | ||
| </tr>
 | ||
| <tr class="row-even"><td><dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.MIN_EMIN">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">MIN_EMIN</span></span><a class="headerlink" href="#decimal.MIN_EMIN" title="Link to this definition">¶</a></dt>
 | ||
| <dd></dd></dl>
 | ||
| 
 | ||
| </td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">-425000000</span></code></p></td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">-999999999999999999</span></code></p></td>
 | ||
| </tr>
 | ||
| <tr class="row-odd"><td><dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.MIN_ETINY">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">MIN_ETINY</span></span><a class="headerlink" href="#decimal.MIN_ETINY" title="Link to this definition">¶</a></dt>
 | ||
| <dd></dd></dl>
 | ||
| 
 | ||
| </td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">-849999999</span></code></p></td>
 | ||
| <td><p><code class="docutils literal notranslate"><span class="pre">-1999999999999999997</span></code></p></td>
 | ||
| </tr>
 | ||
| </tbody>
 | ||
| </table>
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.HAVE_THREADS">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">HAVE_THREADS</span></span><a class="headerlink" href="#decimal.HAVE_THREADS" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>The value is <code class="docutils literal notranslate"><span class="pre">True</span></code>.  Deprecated, because Python now always has threads.</p>
 | ||
| <div class="deprecated">
 | ||
| <p><span class="versionmodified deprecated">Deprecated since version 3.9.</span></p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.HAVE_CONTEXTVAR">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">HAVE_CONTEXTVAR</span></span><a class="headerlink" href="#decimal.HAVE_CONTEXTVAR" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>The default value is <code class="docutils literal notranslate"><span class="pre">True</span></code>. If Python is <a class="reference internal" href="../using/configure.html#cmdoption-without-decimal-contextvar"><code class="xref std std-option docutils literal notranslate"><span class="pre">configured</span> <span class="pre">using</span>
 | ||
| <span class="pre">the</span> <span class="pre">--without-decimal-contextvar</span> <span class="pre">option</span></code></a>,
 | ||
| the C version uses a thread-local rather than a coroutine-local context and the value
 | ||
| is <code class="docutils literal notranslate"><span class="pre">False</span></code>.  This is slightly faster in some nested context scenarios.</p>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.8.3.</span></p>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </section>
 | ||
| <section id="rounding-modes">
 | ||
| <h2>Rounding modes<a class="headerlink" href="#rounding-modes" title="Link to this heading">¶</a></h2>
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_CEILING">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_CEILING</span></span><a class="headerlink" href="#decimal.ROUND_CEILING" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round towards <code class="docutils literal notranslate"><span class="pre">Infinity</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_DOWN">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_DOWN</span></span><a class="headerlink" href="#decimal.ROUND_DOWN" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round towards zero.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_FLOOR">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_FLOOR</span></span><a class="headerlink" href="#decimal.ROUND_FLOOR" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round towards <code class="docutils literal notranslate"><span class="pre">-Infinity</span></code>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_HALF_DOWN">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_HALF_DOWN</span></span><a class="headerlink" href="#decimal.ROUND_HALF_DOWN" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round to nearest with ties going towards zero.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_HALF_EVEN">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_HALF_EVEN</span></span><a class="headerlink" href="#decimal.ROUND_HALF_EVEN" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round to nearest with ties going to nearest even integer.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_HALF_UP">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_HALF_UP</span></span><a class="headerlink" href="#decimal.ROUND_HALF_UP" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round to nearest with ties going away from zero.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_UP">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_UP</span></span><a class="headerlink" href="#decimal.ROUND_UP" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round away from zero.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py data">
 | ||
| <dt class="sig sig-object py" id="decimal.ROUND_05UP">
 | ||
| <span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">ROUND_05UP</span></span><a class="headerlink" href="#decimal.ROUND_05UP" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Round away from zero if last digit after rounding towards zero would have
 | ||
| been 0 or 5; otherwise round towards zero.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </section>
 | ||
| <section id="signals">
 | ||
| <span id="decimal-signals"></span><h2>Signals<a class="headerlink" href="#signals" title="Link to this heading">¶</a></h2>
 | ||
| <p>Signals represent conditions that arise during computation. Each corresponds to
 | ||
| one context flag and one context trap enabler.</p>
 | ||
| <p>The context flag is set whenever the condition is encountered. After the
 | ||
| computation, flags may be checked for informational purposes (for instance, to
 | ||
| determine whether a computation was exact). After checking the flags, be sure to
 | ||
| clear all flags before starting the next computation.</p>
 | ||
| <p>If the context’s trap enabler is set for the signal, then the condition causes a
 | ||
| Python exception to be raised.  For example, if the <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-class docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a> trap
 | ||
| is set, then a <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a> exception is raised upon encountering the
 | ||
| condition.</p>
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Clamped">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Clamped</span></span><a class="headerlink" href="#decimal.Clamped" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Altered an exponent to fit representation constraints.</p>
 | ||
| <p>Typically, clamping occurs when an exponent falls outside the context’s
 | ||
| <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emin</span></code> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emax</span></code> limits.  If possible, the exponent is reduced to
 | ||
| fit by adding zeros to the coefficient.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.DecimalException">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">DecimalException</span></span><a class="headerlink" href="#decimal.DecimalException" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Base class for other signals and a subclass of <a class="reference internal" href="exceptions.html#ArithmeticError" title="ArithmeticError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ArithmeticError</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.DivisionByZero">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">DivisionByZero</span></span><a class="headerlink" href="#decimal.DivisionByZero" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Signals the division of a non-infinite number by zero.</p>
 | ||
| <p>Can occur with division, modulo division, or when raising a number to a negative
 | ||
| power.  If this signal is not trapped, returns <code class="docutils literal notranslate"><span class="pre">Infinity</span></code> or
 | ||
| <code class="docutils literal notranslate"><span class="pre">-Infinity</span></code> with the sign determined by the inputs to the calculation.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Inexact">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Inexact</span></span><a class="headerlink" href="#decimal.Inexact" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Indicates that rounding occurred and the result is not exact.</p>
 | ||
| <p>Signals when non-zero digits were discarded during rounding. The rounded result
 | ||
| is returned.  The signal flag or trap is used to detect when results are
 | ||
| inexact.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.InvalidOperation">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">InvalidOperation</span></span><a class="headerlink" href="#decimal.InvalidOperation" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>An invalid operation was performed.</p>
 | ||
| <p>Indicates that an operation was requested that does not make sense. If not
 | ||
| trapped, returns <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.  Possible causes include:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">Infinity</span> <span class="o">-</span> <span class="n">Infinity</span>
 | ||
| <span class="mi">0</span> <span class="o">*</span> <span class="n">Infinity</span>
 | ||
| <span class="n">Infinity</span> <span class="o">/</span> <span class="n">Infinity</span>
 | ||
| <span class="n">x</span> <span class="o">%</span> <span class="mi">0</span>
 | ||
| <span class="n">Infinity</span> <span class="o">%</span> <span class="n">x</span>
 | ||
| <span class="n">sqrt</span><span class="p">(</span><span class="o">-</span><span class="n">x</span><span class="p">)</span> <span class="ow">and</span> <span class="n">x</span> <span class="o">></span> <span class="mi">0</span>
 | ||
| <span class="mi">0</span> <span class="o">**</span> <span class="mi">0</span>
 | ||
| <span class="n">x</span> <span class="o">**</span> <span class="p">(</span><span class="n">non</span><span class="o">-</span><span class="n">integer</span><span class="p">)</span>
 | ||
| <span class="n">x</span> <span class="o">**</span> <span class="n">Infinity</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Overflow">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Overflow</span></span><a class="headerlink" href="#decimal.Overflow" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Numerical overflow.</p>
 | ||
| <p>Indicates the exponent is larger than <code class="xref py py-attr docutils literal notranslate"><span class="pre">Context.Emax</span></code> after rounding has
 | ||
| occurred.  If not trapped, the result depends on the rounding mode, either
 | ||
| pulling inward to the largest representable finite number or rounding outward
 | ||
| to <code class="docutils literal notranslate"><span class="pre">Infinity</span></code>.  In either case, <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-class docutils literal notranslate"><span class="pre">Inexact</span></code></a> and <a class="reference internal" href="#decimal.Rounded" title="decimal.Rounded"><code class="xref py py-class docutils literal notranslate"><span class="pre">Rounded</span></code></a>
 | ||
| are also signaled.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Rounded">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Rounded</span></span><a class="headerlink" href="#decimal.Rounded" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Rounding occurred though possibly no information was lost.</p>
 | ||
| <p>Signaled whenever rounding discards digits; even if those digits are zero
 | ||
| (such as rounding <code class="docutils literal notranslate"><span class="pre">5.00</span></code> to <code class="docutils literal notranslate"><span class="pre">5.0</span></code>).  If not trapped, returns
 | ||
| the result unchanged.  This signal is used to detect loss of significant
 | ||
| digits.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Subnormal">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Subnormal</span></span><a class="headerlink" href="#decimal.Subnormal" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Exponent was lower than <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emin</span></code> prior to rounding.</p>
 | ||
| <p>Occurs when an operation result is subnormal (the exponent is too small). If
 | ||
| not trapped, returns the result unchanged.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.Underflow">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">Underflow</span></span><a class="headerlink" href="#decimal.Underflow" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Numerical underflow with result rounded to zero.</p>
 | ||
| <p>Occurs when a subnormal result is pushed to zero by rounding. <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-class docutils literal notranslate"><span class="pre">Inexact</span></code></a>
 | ||
| and <a class="reference internal" href="#decimal.Subnormal" title="decimal.Subnormal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Subnormal</span></code></a> are also signaled.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <dl class="py class">
 | ||
| <dt class="sig sig-object py" id="decimal.FloatOperation">
 | ||
| <em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">decimal.</span></span><span class="sig-name descname"><span class="pre">FloatOperation</span></span><a class="headerlink" href="#decimal.FloatOperation" title="Link to this definition">¶</a></dt>
 | ||
| <dd><p>Enable stricter semantics for mixing floats and Decimals.</p>
 | ||
| <p>If the signal is not trapped (default), mixing floats and Decimals is
 | ||
| permitted in the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> constructor,
 | ||
| <a class="reference internal" href="#decimal.Context.create_decimal" title="decimal.Context.create_decimal"><code class="xref py py-meth docutils literal notranslate"><span class="pre">create_decimal()</span></code></a> and all comparison operators.
 | ||
| Both conversion and comparisons are exact. Any occurrence of a mixed
 | ||
| operation is silently recorded by setting <a class="reference internal" href="#decimal.FloatOperation" title="decimal.FloatOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FloatOperation</span></code></a> in the
 | ||
| context flags. Explicit conversions with <a class="reference internal" href="#decimal.Decimal.from_float" title="decimal.Decimal.from_float"><code class="xref py py-meth docutils literal notranslate"><span class="pre">from_float()</span></code></a>
 | ||
| or <a class="reference internal" href="#decimal.Context.create_decimal_from_float" title="decimal.Context.create_decimal_from_float"><code class="xref py py-meth docutils literal notranslate"><span class="pre">create_decimal_from_float()</span></code></a> do not set the flag.</p>
 | ||
| <p>Otherwise (the signal is trapped), only equality comparisons and explicit
 | ||
| conversions are silent. All other mixed operations raise <a class="reference internal" href="#decimal.FloatOperation" title="decimal.FloatOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">FloatOperation</span></code></a>.</p>
 | ||
| </dd></dl>
 | ||
| 
 | ||
| <p>The following table summarizes the hierarchy of signals:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">exceptions</span><span class="o">.</span><span class="n">ArithmeticError</span><span class="p">(</span><span class="n">exceptions</span><span class="o">.</span><span class="n">Exception</span><span class="p">)</span>
 | ||
|     <span class="n">DecimalException</span>
 | ||
|         <span class="n">Clamped</span>
 | ||
|         <span class="n">DivisionByZero</span><span class="p">(</span><span class="n">DecimalException</span><span class="p">,</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">ZeroDivisionError</span><span class="p">)</span>
 | ||
|         <span class="n">Inexact</span>
 | ||
|             <span class="n">Overflow</span><span class="p">(</span><span class="n">Inexact</span><span class="p">,</span> <span class="n">Rounded</span><span class="p">)</span>
 | ||
|             <span class="n">Underflow</span><span class="p">(</span><span class="n">Inexact</span><span class="p">,</span> <span class="n">Rounded</span><span class="p">,</span> <span class="n">Subnormal</span><span class="p">)</span>
 | ||
|         <span class="n">InvalidOperation</span>
 | ||
|         <span class="n">Rounded</span>
 | ||
|         <span class="n">Subnormal</span>
 | ||
|         <span class="n">FloatOperation</span><span class="p">(</span><span class="n">DecimalException</span><span class="p">,</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">TypeError</span><span class="p">)</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="floating-point-notes">
 | ||
| <span id="decimal-notes"></span><h2>Floating-Point Notes<a class="headerlink" href="#floating-point-notes" title="Link to this heading">¶</a></h2>
 | ||
| <section id="mitigating-round-off-error-with-increased-precision">
 | ||
| <h3>Mitigating round-off error with increased precision<a class="headerlink" href="#mitigating-round-off-error-with-increased-precision" title="Link to this heading">¶</a></h3>
 | ||
| <p>The use of decimal floating point eliminates decimal representation error
 | ||
| (making it possible to represent <code class="docutils literal notranslate"><span class="pre">0.1</span></code> exactly); however, some operations
 | ||
| can still incur round-off error when non-zero digits exceed the fixed precision.</p>
 | ||
| <p>The effects of round-off error can be amplified by the addition or subtraction
 | ||
| of nearly offsetting quantities resulting in loss of significance.  Knuth
 | ||
| provides two instructive examples where rounded floating-point arithmetic with
 | ||
| insufficient precision causes the breakdown of the associative and distributive
 | ||
| properties of addition:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="go"># Examples from Seminumerical Algorithms, Section 4.2.2.</span>
 | ||
| <span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">decimal</span><span class="w"> </span><span class="kn">import</span> <span class="n">Decimal</span><span class="p">,</span> <span class="n">getcontext</span>
 | ||
| <span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">8</span>
 | ||
| 
 | ||
| <span class="gp">>>> </span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">11111113</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">11111111</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'7.51111111'</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">u</span> <span class="o">+</span> <span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="n">w</span>
 | ||
| <span class="go">Decimal('9.5111111')</span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span> <span class="o">+</span> <span class="p">(</span><span class="n">v</span> <span class="o">+</span> <span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('10')</span>
 | ||
| 
 | ||
| <span class="gp">>>> </span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">20000</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">6</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'6.0000003'</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">u</span><span class="o">*</span><span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">u</span><span class="o">*</span><span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.01')</span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span> <span class="o">*</span> <span class="p">(</span><span class="n">v</span><span class="o">+</span><span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.0060000')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The <a class="reference internal" href="#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> module makes it possible to restore the identities by
 | ||
| expanding the precision sufficiently to avoid loss of significance:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">20</span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">11111113</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">11111111</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'7.51111111'</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">u</span> <span class="o">+</span> <span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="n">w</span>
 | ||
| <span class="go">Decimal('9.51111111')</span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span> <span class="o">+</span> <span class="p">(</span><span class="n">v</span> <span class="o">+</span> <span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('9.51111111')</span>
 | ||
| <span class="gp">>>></span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">20000</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="o">-</span><span class="mi">6</span><span class="p">),</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'6.0000003'</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">u</span><span class="o">*</span><span class="n">v</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">u</span><span class="o">*</span><span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.0060000')</span>
 | ||
| <span class="gp">>>> </span><span class="n">u</span> <span class="o">*</span> <span class="p">(</span><span class="n">v</span><span class="o">+</span><span class="n">w</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.0060000')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="special-values">
 | ||
| <h3>Special values<a class="headerlink" href="#special-values" title="Link to this heading">¶</a></h3>
 | ||
| <p>The number system for the <a class="reference internal" href="#module-decimal" title="decimal: Implementation of the General Decimal Arithmetic  Specification."><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code></a> module provides special values
 | ||
| including <code class="docutils literal notranslate"><span class="pre">NaN</span></code>, <code class="docutils literal notranslate"><span class="pre">sNaN</span></code>, <code class="docutils literal notranslate"><span class="pre">-Infinity</span></code>, <code class="docutils literal notranslate"><span class="pre">Infinity</span></code>,
 | ||
| and two zeros, <code class="docutils literal notranslate"><span class="pre">+0</span></code> and <code class="docutils literal notranslate"><span class="pre">-0</span></code>.</p>
 | ||
| <p>Infinities can be constructed directly with:  <code class="docutils literal notranslate"><span class="pre">Decimal('Infinity')</span></code>. Also,
 | ||
| they can arise from dividing by zero when the <a class="reference internal" href="#decimal.DivisionByZero" title="decimal.DivisionByZero"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DivisionByZero</span></code></a> signal is
 | ||
| not trapped.  Likewise, when the <a class="reference internal" href="#decimal.Overflow" title="decimal.Overflow"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Overflow</span></code></a> signal is not trapped, infinity
 | ||
| can result from rounding beyond the limits of the largest representable number.</p>
 | ||
| <p>The infinities are signed (affine) and can be used in arithmetic operations
 | ||
| where they get treated as very large, indeterminate numbers.  For instance,
 | ||
| adding a constant to infinity gives another infinite result.</p>
 | ||
| <p>Some operations are indeterminate and return <code class="docutils literal notranslate"><span class="pre">NaN</span></code>, or if the
 | ||
| <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a> signal is trapped, raise an exception.  For example,
 | ||
| <code class="docutils literal notranslate"><span class="pre">0/0</span></code> returns <code class="docutils literal notranslate"><span class="pre">NaN</span></code> which means “not a number”.  This variety of
 | ||
| <code class="docutils literal notranslate"><span class="pre">NaN</span></code> is quiet and, once created, will flow through other computations
 | ||
| always resulting in another <code class="docutils literal notranslate"><span class="pre">NaN</span></code>.  This behavior can be useful for a
 | ||
| series of computations that occasionally have missing inputs — it allows the
 | ||
| calculation to proceed while flagging specific results as invalid.</p>
 | ||
| <p>A variant is <code class="docutils literal notranslate"><span class="pre">sNaN</span></code> which signals rather than remaining quiet after every
 | ||
| operation.  This is a useful return value when an invalid result needs to
 | ||
| interrupt a calculation for special handling.</p>
 | ||
| <p>The behavior of Python’s comparison operators can be a little surprising where a
 | ||
| <code class="docutils literal notranslate"><span class="pre">NaN</span></code> is involved.  A test for equality where one of the operands is a
 | ||
| quiet or signaling <code class="docutils literal notranslate"><span class="pre">NaN</span></code> always returns <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> (even when doing
 | ||
| <code class="docutils literal notranslate"><span class="pre">Decimal('NaN')==Decimal('NaN')</span></code>), while a test for inequality always returns
 | ||
| <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a>.  An attempt to compare two Decimals using any of the <code class="docutils literal notranslate"><span class="pre"><</span></code>,
 | ||
| <code class="docutils literal notranslate"><span class="pre"><=</span></code>, <code class="docutils literal notranslate"><span class="pre">></span></code> or <code class="docutils literal notranslate"><span class="pre">>=</span></code> operators will raise the <a class="reference internal" href="#decimal.InvalidOperation" title="decimal.InvalidOperation"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InvalidOperation</span></code></a> signal
 | ||
| if either operand is a <code class="docutils literal notranslate"><span class="pre">NaN</span></code>, and return <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a> if this signal is
 | ||
| not trapped.  Note that the General Decimal Arithmetic specification does not
 | ||
| specify the behavior of direct comparisons; these rules for comparisons
 | ||
| involving a <code class="docutils literal notranslate"><span class="pre">NaN</span></code> were taken from the IEEE 854 standard (see Table 3 in
 | ||
| section 5.7).  To ensure strict standards-compliance, use the <a class="reference internal" href="#decimal.Decimal.compare" title="decimal.Decimal.compare"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare()</span></code></a>
 | ||
| and <a class="reference internal" href="#decimal.Decimal.compare_signal" title="decimal.Decimal.compare_signal"><code class="xref py py-meth docutils literal notranslate"><span class="pre">compare_signal()</span></code></a> methods instead.</p>
 | ||
| <p>The signed zeros can result from calculations that underflow. They keep the sign
 | ||
| that would have resulted if the calculation had been carried out to greater
 | ||
| precision.  Since their magnitude is zero, both positive and negative zeros are
 | ||
| treated as equal and their sign is informational.</p>
 | ||
| <p>In addition to the two signed zeros which are distinct yet equal, there are
 | ||
| various representations of zero with differing precisions yet equivalent in
 | ||
| value.  This takes a bit of getting used to.  For an eye accustomed to
 | ||
| normalized floating-point representations, it is not immediately obvious that
 | ||
| the following calculation returns a value equal to zero:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="mi">1</span> <span class="o">/</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'Infinity'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0E-1000026')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="working-with-threads">
 | ||
| <span id="decimal-threads"></span><h2>Working with threads<a class="headerlink" href="#working-with-threads" title="Link to this heading">¶</a></h2>
 | ||
| <p>The <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a> function accesses a different <a class="reference internal" href="#decimal.Context" title="decimal.Context"><code class="xref py py-class docutils literal notranslate"><span class="pre">Context</span></code></a> object for
 | ||
| each thread.  Having separate thread contexts means that threads may make
 | ||
| changes (such as <code class="docutils literal notranslate"><span class="pre">getcontext().prec=10</span></code>) without interfering with other threads.</p>
 | ||
| <p>Likewise, the <a class="reference internal" href="#decimal.setcontext" title="decimal.setcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">setcontext()</span></code></a> function automatically assigns its target to
 | ||
| the current thread.</p>
 | ||
| <p>If <a class="reference internal" href="#decimal.setcontext" title="decimal.setcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">setcontext()</span></code></a> has not been called before <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a>, then
 | ||
| <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a> will automatically create a new context for use in the
 | ||
| current thread.</p>
 | ||
| <p>The new context is copied from a prototype context called <em>DefaultContext</em>. To
 | ||
| control the defaults so that each thread will use the same values throughout the
 | ||
| application, directly modify the <em>DefaultContext</em> object. This should be done
 | ||
| <em>before</em> any threads are started so that there won’t be a race condition between
 | ||
| threads calling <a class="reference internal" href="#decimal.getcontext" title="decimal.getcontext"><code class="xref py py-func docutils literal notranslate"><span class="pre">getcontext()</span></code></a>. For example:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Set applicationwide defaults for all threads about to be launched</span>
 | ||
| <span class="n">DefaultContext</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">12</span>
 | ||
| <span class="n">DefaultContext</span><span class="o">.</span><span class="n">rounding</span> <span class="o">=</span> <span class="n">ROUND_DOWN</span>
 | ||
| <span class="n">DefaultContext</span><span class="o">.</span><span class="n">traps</span> <span class="o">=</span> <span class="n">ExtendedContext</span><span class="o">.</span><span class="n">traps</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
 | ||
| <span class="n">DefaultContext</span><span class="o">.</span><span class="n">traps</span><span class="p">[</span><span class="n">InvalidOperation</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
 | ||
| <span class="n">setcontext</span><span class="p">(</span><span class="n">DefaultContext</span><span class="p">)</span>
 | ||
| 
 | ||
| <span class="c1"># Afterwards, the threads can be started</span>
 | ||
| <span class="n">t1</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
 | ||
| <span class="n">t2</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
 | ||
| <span class="n">t3</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
 | ||
|  <span class="o">.</span> <span class="o">.</span> <span class="o">.</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="recipes">
 | ||
| <span id="decimal-recipes"></span><h2>Recipes<a class="headerlink" href="#recipes" title="Link to this heading">¶</a></h2>
 | ||
| <p>Here are a few recipes that serve as utility functions and that demonstrate ways
 | ||
| to work with the <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a> class:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">moneyfmt</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">places</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">curr</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s1">','</span><span class="p">,</span> <span class="n">dp</span><span class="o">=</span><span class="s1">'.'</span><span class="p">,</span>
 | ||
|              <span class="n">pos</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">neg</span><span class="o">=</span><span class="s1">'-'</span><span class="p">,</span> <span class="n">trailneg</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span>
 | ||
| <span class="w">    </span><span class="sd">"""Convert Decimal to a money formatted string.</span>
 | ||
| 
 | ||
| <span class="sd">    places:  required number of places after the decimal point</span>
 | ||
| <span class="sd">    curr:    optional currency symbol before the sign (may be blank)</span>
 | ||
| <span class="sd">    sep:     optional grouping separator (comma, period, space, or blank)</span>
 | ||
| <span class="sd">    dp:      decimal point indicator (comma or period)</span>
 | ||
| <span class="sd">             only specify as blank when places is zero</span>
 | ||
| <span class="sd">    pos:     optional sign for positive numbers: '+', space or blank</span>
 | ||
| <span class="sd">    neg:     optional sign for negative numbers: '-', '(', space or blank</span>
 | ||
| <span class="sd">    trailneg:optional trailing minus indicator:  '-', ')', space or blank</span>
 | ||
| 
 | ||
| <span class="sd">    >>> d = Decimal('-1234567.8901')</span>
 | ||
| <span class="sd">    >>> moneyfmt(d, curr='$')</span>
 | ||
| <span class="sd">    '-$1,234,567.89'</span>
 | ||
| <span class="sd">    >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')</span>
 | ||
| <span class="sd">    '1.234.568-'</span>
 | ||
| <span class="sd">    >>> moneyfmt(d, curr='$', neg='(', trailneg=')')</span>
 | ||
| <span class="sd">    '($1,234,567.89)'</span>
 | ||
| <span class="sd">    >>> moneyfmt(Decimal(123456789), sep=' ')</span>
 | ||
| <span class="sd">    '123 456 789.00'</span>
 | ||
| <span class="sd">    >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')</span>
 | ||
| <span class="sd">    '<0.02>'</span>
 | ||
| 
 | ||
| <span class="sd">    """</span>
 | ||
|     <span class="n">q</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">**</span> <span class="o">-</span><span class="n">places</span>      <span class="c1"># 2 places --> '0.01'</span>
 | ||
|     <span class="n">sign</span><span class="p">,</span> <span class="n">digits</span><span class="p">,</span> <span class="n">exp</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">q</span><span class="p">)</span><span class="o">.</span><span class="n">as_tuple</span><span class="p">()</span>
 | ||
|     <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
 | ||
|     <span class="n">digits</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="n">digits</span><span class="p">))</span>
 | ||
|     <span class="n">build</span><span class="p">,</span> <span class="nb">next</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">,</span> <span class="n">digits</span><span class="o">.</span><span class="n">pop</span>
 | ||
|     <span class="k">if</span> <span class="n">sign</span><span class="p">:</span>
 | ||
|         <span class="n">build</span><span class="p">(</span><span class="n">trailneg</span><span class="p">)</span>
 | ||
|     <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">places</span><span class="p">):</span>
 | ||
|         <span class="n">build</span><span class="p">(</span><span class="nb">next</span><span class="p">()</span> <span class="k">if</span> <span class="n">digits</span> <span class="k">else</span> <span class="s1">'0'</span><span class="p">)</span>
 | ||
|     <span class="k">if</span> <span class="n">places</span><span class="p">:</span>
 | ||
|         <span class="n">build</span><span class="p">(</span><span class="n">dp</span><span class="p">)</span>
 | ||
|     <span class="k">if</span> <span class="ow">not</span> <span class="n">digits</span><span class="p">:</span>
 | ||
|         <span class="n">build</span><span class="p">(</span><span class="s1">'0'</span><span class="p">)</span>
 | ||
|     <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
 | ||
|     <span class="k">while</span> <span class="n">digits</span><span class="p">:</span>
 | ||
|         <span class="n">build</span><span class="p">(</span><span class="nb">next</span><span class="p">())</span>
 | ||
|         <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
 | ||
|         <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">digits</span><span class="p">:</span>
 | ||
|             <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
 | ||
|             <span class="n">build</span><span class="p">(</span><span class="n">sep</span><span class="p">)</span>
 | ||
|     <span class="n">build</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
 | ||
|     <span class="n">build</span><span class="p">(</span><span class="n">neg</span> <span class="k">if</span> <span class="n">sign</span> <span class="k">else</span> <span class="n">pos</span><span class="p">)</span>
 | ||
|     <span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">result</span><span class="p">))</span>
 | ||
| 
 | ||
| <span class="k">def</span><span class="w"> </span><span class="nf">pi</span><span class="p">():</span>
 | ||
| <span class="w">    </span><span class="sd">"""Compute Pi to the current precision.</span>
 | ||
| 
 | ||
| <span class="sd">    >>> print(pi())</span>
 | ||
| <span class="sd">    3.141592653589793238462643383</span>
 | ||
| 
 | ||
| <span class="sd">    """</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">+=</span> <span class="mi">2</span>  <span class="c1"># extra digits for intermediate steps</span>
 | ||
|     <span class="n">three</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>      <span class="c1"># substitute "three=3.0" for regular floats</span>
 | ||
|     <span class="n">lasts</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">na</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">da</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">three</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">24</span>
 | ||
|     <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="n">lasts</span><span class="p">:</span>
 | ||
|         <span class="n">lasts</span> <span class="o">=</span> <span class="n">s</span>
 | ||
|         <span class="n">n</span><span class="p">,</span> <span class="n">na</span> <span class="o">=</span> <span class="n">n</span><span class="o">+</span><span class="n">na</span><span class="p">,</span> <span class="n">na</span><span class="o">+</span><span class="mi">8</span>
 | ||
|         <span class="n">d</span><span class="p">,</span> <span class="n">da</span> <span class="o">=</span> <span class="n">d</span><span class="o">+</span><span class="n">da</span><span class="p">,</span> <span class="n">da</span><span class="o">+</span><span class="mi">32</span>
 | ||
|         <span class="n">t</span> <span class="o">=</span> <span class="p">(</span><span class="n">t</span> <span class="o">*</span> <span class="n">n</span><span class="p">)</span> <span class="o">/</span> <span class="n">d</span>
 | ||
|         <span class="n">s</span> <span class="o">+=</span> <span class="n">t</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">-=</span> <span class="mi">2</span>
 | ||
|     <span class="k">return</span> <span class="o">+</span><span class="n">s</span>               <span class="c1"># unary plus applies the new precision</span>
 | ||
| 
 | ||
| <span class="k">def</span><span class="w"> </span><span class="nf">exp</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
 | ||
| <span class="w">    </span><span class="sd">"""Return e raised to the power of x.  Result type matches input type.</span>
 | ||
| 
 | ||
| <span class="sd">    >>> print(exp(Decimal(1)))</span>
 | ||
| <span class="sd">    2.718281828459045235360287471</span>
 | ||
| <span class="sd">    >>> print(exp(Decimal(2)))</span>
 | ||
| <span class="sd">    7.389056098930650227230427461</span>
 | ||
| <span class="sd">    >>> print(exp(2.0))</span>
 | ||
| <span class="sd">    7.38905609893</span>
 | ||
| <span class="sd">    >>> print(exp(2+0j))</span>
 | ||
| <span class="sd">    (7.38905609893+0j)</span>
 | ||
| 
 | ||
| <span class="sd">    """</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">+=</span> <span class="mi">2</span>
 | ||
|     <span class="n">i</span><span class="p">,</span> <span class="n">lasts</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">fact</span><span class="p">,</span> <span class="n">num</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
 | ||
|     <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="n">lasts</span><span class="p">:</span>
 | ||
|         <span class="n">lasts</span> <span class="o">=</span> <span class="n">s</span>
 | ||
|         <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
 | ||
|         <span class="n">fact</span> <span class="o">*=</span> <span class="n">i</span>
 | ||
|         <span class="n">num</span> <span class="o">*=</span> <span class="n">x</span>
 | ||
|         <span class="n">s</span> <span class="o">+=</span> <span class="n">num</span> <span class="o">/</span> <span class="n">fact</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">-=</span> <span class="mi">2</span>
 | ||
|     <span class="k">return</span> <span class="o">+</span><span class="n">s</span>
 | ||
| 
 | ||
| <span class="k">def</span><span class="w"> </span><span class="nf">cos</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
 | ||
| <span class="w">    </span><span class="sd">"""Return the cosine of x as measured in radians.</span>
 | ||
| 
 | ||
| <span class="sd">    The Taylor series approximation works best for a small value of x.</span>
 | ||
| <span class="sd">    For larger values, first compute x = x % (2 * pi).</span>
 | ||
| 
 | ||
| <span class="sd">    >>> print(cos(Decimal('0.5')))</span>
 | ||
| <span class="sd">    0.8775825618903727161162815826</span>
 | ||
| <span class="sd">    >>> print(cos(0.5))</span>
 | ||
| <span class="sd">    0.87758256189</span>
 | ||
| <span class="sd">    >>> print(cos(0.5+0j))</span>
 | ||
| <span class="sd">    (0.87758256189+0j)</span>
 | ||
| 
 | ||
| <span class="sd">    """</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">+=</span> <span class="mi">2</span>
 | ||
|     <span class="n">i</span><span class="p">,</span> <span class="n">lasts</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">fact</span><span class="p">,</span> <span class="n">num</span><span class="p">,</span> <span class="n">sign</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
 | ||
|     <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="n">lasts</span><span class="p">:</span>
 | ||
|         <span class="n">lasts</span> <span class="o">=</span> <span class="n">s</span>
 | ||
|         <span class="n">i</span> <span class="o">+=</span> <span class="mi">2</span>
 | ||
|         <span class="n">fact</span> <span class="o">*=</span> <span class="n">i</span> <span class="o">*</span> <span class="p">(</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
 | ||
|         <span class="n">num</span> <span class="o">*=</span> <span class="n">x</span> <span class="o">*</span> <span class="n">x</span>
 | ||
|         <span class="n">sign</span> <span class="o">*=</span> <span class="o">-</span><span class="mi">1</span>
 | ||
|         <span class="n">s</span> <span class="o">+=</span> <span class="n">num</span> <span class="o">/</span> <span class="n">fact</span> <span class="o">*</span> <span class="n">sign</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">-=</span> <span class="mi">2</span>
 | ||
|     <span class="k">return</span> <span class="o">+</span><span class="n">s</span>
 | ||
| 
 | ||
| <span class="k">def</span><span class="w"> </span><span class="nf">sin</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
 | ||
| <span class="w">    </span><span class="sd">"""Return the sine of x as measured in radians.</span>
 | ||
| 
 | ||
| <span class="sd">    The Taylor series approximation works best for a small value of x.</span>
 | ||
| <span class="sd">    For larger values, first compute x = x % (2 * pi).</span>
 | ||
| 
 | ||
| <span class="sd">    >>> print(sin(Decimal('0.5')))</span>
 | ||
| <span class="sd">    0.4794255386042030002732879352</span>
 | ||
| <span class="sd">    >>> print(sin(0.5))</span>
 | ||
| <span class="sd">    0.479425538604</span>
 | ||
| <span class="sd">    >>> print(sin(0.5+0j))</span>
 | ||
| <span class="sd">    (0.479425538604+0j)</span>
 | ||
| 
 | ||
| <span class="sd">    """</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">+=</span> <span class="mi">2</span>
 | ||
|     <span class="n">i</span><span class="p">,</span> <span class="n">lasts</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">fact</span><span class="p">,</span> <span class="n">num</span><span class="p">,</span> <span class="n">sign</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="mi">1</span>
 | ||
|     <span class="k">while</span> <span class="n">s</span> <span class="o">!=</span> <span class="n">lasts</span><span class="p">:</span>
 | ||
|         <span class="n">lasts</span> <span class="o">=</span> <span class="n">s</span>
 | ||
|         <span class="n">i</span> <span class="o">+=</span> <span class="mi">2</span>
 | ||
|         <span class="n">fact</span> <span class="o">*=</span> <span class="n">i</span> <span class="o">*</span> <span class="p">(</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
 | ||
|         <span class="n">num</span> <span class="o">*=</span> <span class="n">x</span> <span class="o">*</span> <span class="n">x</span>
 | ||
|         <span class="n">sign</span> <span class="o">*=</span> <span class="o">-</span><span class="mi">1</span>
 | ||
|         <span class="n">s</span> <span class="o">+=</span> <span class="n">num</span> <span class="o">/</span> <span class="n">fact</span> <span class="o">*</span> <span class="n">sign</span>
 | ||
|     <span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">-=</span> <span class="mi">2</span>
 | ||
|     <span class="k">return</span> <span class="o">+</span><span class="n">s</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="decimal-faq">
 | ||
| <span id="id1"></span><h2>Decimal FAQ<a class="headerlink" href="#decimal-faq" title="Link to this heading">¶</a></h2>
 | ||
| <p>Q. It is cumbersome to type <code class="docutils literal notranslate"><span class="pre">decimal.Decimal('1234.5')</span></code>.  Is there a way to
 | ||
| minimize typing when using the interactive interpreter?</p>
 | ||
| <p>A. Some users abbreviate the constructor to just a single letter:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">D</span> <span class="o">=</span> <span class="n">decimal</span><span class="o">.</span><span class="n">Decimal</span>
 | ||
| <span class="gp">>>> </span><span class="n">D</span><span class="p">(</span><span class="s1">'1.23'</span><span class="p">)</span> <span class="o">+</span> <span class="n">D</span><span class="p">(</span><span class="s1">'3.45'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('4.68')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. In a fixed-point application with two decimal places, some inputs have many
 | ||
| places and need to be rounded.  Others are not supposed to have excess digits
 | ||
| and need to be validated.  What methods should be used?</p>
 | ||
| <p>A. The <a class="reference internal" href="#decimal.Decimal.quantize" title="decimal.Decimal.quantize"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantize()</span></code></a> method rounds to a fixed number of decimal places. If
 | ||
| the <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-const docutils literal notranslate"><span class="pre">Inexact</span></code></a> trap is set, it is also useful for validation:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">TWOPLACES</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">**</span> <span class="o">-</span><span class="mi">2</span>       <span class="c1"># same as Decimal('0.01')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="c1"># Round to two places</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.214'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">TWOPLACES</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.21')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="c1"># Validate that a number does not exceed two places</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.21'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">TWOPLACES</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">Context</span><span class="p">(</span><span class="n">traps</span><span class="o">=</span><span class="p">[</span><span class="n">Inexact</span><span class="p">]))</span>
 | ||
| <span class="go">Decimal('3.21')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.214'</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">TWOPLACES</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="n">Context</span><span class="p">(</span><span class="n">traps</span><span class="o">=</span><span class="p">[</span><span class="n">Inexact</span><span class="p">]))</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
| <span class="w">   </span><span class="c">...</span>
 | ||
| <span class="gr">Inexact</span>: <span class="n">None</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. Once I have valid two place inputs, how do I maintain that invariant
 | ||
| throughout an application?</p>
 | ||
| <p>A. Some operations like addition, subtraction, and multiplication by an integer
 | ||
| will automatically preserve fixed point.  Others operations, like division and
 | ||
| non-integer multiplication, will change the number of decimal places and need to
 | ||
| be followed-up with a <a class="reference internal" href="#decimal.Decimal.quantize" title="decimal.Decimal.quantize"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantize()</span></code></a> step:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">a</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'102.72'</span><span class="p">)</span>           <span class="c1"># Initial fixed-point values</span>
 | ||
| <span class="gp">>>> </span><span class="n">b</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.17'</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span>                           <span class="c1"># Addition preserves fixed-point</span>
 | ||
| <span class="go">Decimal('105.89')</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span>
 | ||
| <span class="go">Decimal('99.55')</span>
 | ||
| <span class="gp">>>> </span><span class="n">a</span> <span class="o">*</span> <span class="mi">42</span>                          <span class="c1"># So does integer multiplication</span>
 | ||
| <span class="go">Decimal('4314.24')</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">TWOPLACES</span><span class="p">)</span>     <span class="c1"># Must quantize non-integer multiplication</span>
 | ||
| <span class="go">Decimal('325.62')</span>
 | ||
| <span class="gp">>>> </span><span class="p">(</span><span class="n">b</span> <span class="o">/</span> <span class="n">a</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">TWOPLACES</span><span class="p">)</span>     <span class="c1"># And quantize division</span>
 | ||
| <span class="go">Decimal('0.03')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>In developing fixed-point applications, it is convenient to define functions
 | ||
| to handle the <a class="reference internal" href="#decimal.Decimal.quantize" title="decimal.Decimal.quantize"><code class="xref py py-meth docutils literal notranslate"><span class="pre">quantize()</span></code></a> step:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span><span class="w"> </span><span class="nf">mul</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">fp</span><span class="o">=</span><span class="n">TWOPLACES</span><span class="p">):</span>
 | ||
| <span class="gp">... </span>    <span class="k">return</span> <span class="p">(</span><span class="n">x</span> <span class="o">*</span> <span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
 | ||
| <span class="gp">...</span>
 | ||
| <span class="gp">>>> </span><span class="k">def</span><span class="w"> </span><span class="nf">div</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">fp</span><span class="o">=</span><span class="n">TWOPLACES</span><span class="p">):</span>
 | ||
| <span class="gp">... </span>    <span class="k">return</span> <span class="p">(</span><span class="n">x</span> <span class="o">/</span> <span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">mul</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>                       <span class="c1"># Automatically preserve fixed-point</span>
 | ||
| <span class="go">Decimal('325.62')</span>
 | ||
| <span class="gp">>>> </span><span class="n">div</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('0.03')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. There are many ways to express the same value.  The numbers <code class="docutils literal notranslate"><span class="pre">200</span></code>,
 | ||
| <code class="docutils literal notranslate"><span class="pre">200.000</span></code>, <code class="docutils literal notranslate"><span class="pre">2E2</span></code>, and <code class="docutils literal notranslate"><span class="pre">.02E+4</span></code> all have the same value at
 | ||
| various precisions. Is there a way to transform them to a single recognizable
 | ||
| canonical value?</p>
 | ||
| <p>A. The <a class="reference internal" href="#decimal.Decimal.normalize" title="decimal.Decimal.normalize"><code class="xref py py-meth docutils literal notranslate"><span class="pre">normalize()</span></code></a> method maps all equivalent values to a single
 | ||
| representative:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">values</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">Decimal</span><span class="p">,</span> <span class="s1">'200 200.000 2E2 .02E+4'</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
 | ||
| <span class="gp">>>> </span><span class="p">[</span><span class="n">v</span><span class="o">.</span><span class="n">normalize</span><span class="p">()</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
 | ||
| <span class="go">[Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2')]</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. When does rounding occur in a computation?</p>
 | ||
| <p>A. It occurs <em>after</em> the computation.  The philosophy of the decimal
 | ||
| specification is that numbers are considered exact and are created
 | ||
| independent of the current context.  They can even have greater
 | ||
| precision than current context.  Computations process with those
 | ||
| exact inputs and then rounding (or other context operations) is
 | ||
| applied to the <em>result</em> of the computation:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">5</span>
 | ||
| <span class="gp">>>> </span><span class="n">pi</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.1415926535'</span><span class="p">)</span>   <span class="c1"># More than 5 digits</span>
 | ||
| <span class="gp">>>> </span><span class="n">pi</span>                             <span class="c1"># All digits are retained</span>
 | ||
| <span class="go">Decimal('3.1415926535')</span>
 | ||
| <span class="gp">>>> </span><span class="n">pi</span> <span class="o">+</span> <span class="mi">0</span>                         <span class="c1"># Rounded after an addition</span>
 | ||
| <span class="go">Decimal('3.1416')</span>
 | ||
| <span class="gp">>>> </span><span class="n">pi</span> <span class="o">-</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'0.00005'</span><span class="p">)</span>        <span class="c1"># Subtract unrounded numbers, then round</span>
 | ||
| <span class="go">Decimal('3.1415')</span>
 | ||
| <span class="gp">>>> </span><span class="n">pi</span> <span class="o">+</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'0.00005'</span><span class="p">)</span><span class="o">.</span>   <span class="c1"># Intermediate values are rounded</span>
 | ||
| <span class="go">Decimal('3.1416')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. Some decimal values always print with exponential notation.  Is there a way
 | ||
| to get a non-exponential representation?</p>
 | ||
| <p>A. For some values, exponential notation is the only way to express the number
 | ||
| of significant places in the coefficient.  For example, expressing
 | ||
| <code class="docutils literal notranslate"><span class="pre">5.0E+3</span></code> as <code class="docutils literal notranslate"><span class="pre">5000</span></code> keeps the value constant but cannot show the
 | ||
| original’s two-place significance.</p>
 | ||
| <p>If an application does not care about tracking significance, it is easy to
 | ||
| remove the exponent and trailing zeroes, losing significance, but keeping the
 | ||
| value unchanged:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">def</span><span class="w"> </span><span class="nf">remove_exponent</span><span class="p">(</span><span class="n">d</span><span class="p">):</span>
 | ||
| <span class="gp">... </span>    <span class="k">return</span> <span class="n">d</span><span class="o">.</span><span class="n">quantize</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span> <span class="k">if</span> <span class="n">d</span> <span class="o">==</span> <span class="n">d</span><span class="o">.</span><span class="n">to_integral</span><span class="p">()</span> <span class="k">else</span> <span class="n">d</span><span class="o">.</span><span class="n">normalize</span><span class="p">()</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">remove_exponent</span><span class="p">(</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'5E+3'</span><span class="p">))</span>
 | ||
| <span class="go">Decimal('5000')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. Is there a way to convert a regular float to a <a class="reference internal" href="#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">Decimal</span></code></a>?</p>
 | ||
| <p>A. Yes, any binary floating-point number can be exactly expressed as a
 | ||
| Decimal though an exact conversion may take more precision than intuition would
 | ||
| suggest:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('3.141592653589793115997963468544185161590576171875')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. Within a complex calculation, how can I make sure that I haven’t gotten a
 | ||
| spurious result because of insufficient precision or rounding anomalies.</p>
 | ||
| <p>A. The decimal module makes it easy to test results.  A best practice is to
 | ||
| re-run calculations using greater precision and with various rounding modes.
 | ||
| Widely differing results indicate insufficient precision, rounding mode issues,
 | ||
| ill-conditioned inputs, or a numerically unstable algorithm.</p>
 | ||
| <p>Q. I noticed that context precision is applied to the results of operations but
 | ||
| not to the inputs.  Is there anything to watch out for when mixing values of
 | ||
| different precisions?</p>
 | ||
| <p>A. Yes.  The principle is that all values are considered to be exact and so is
 | ||
| the arithmetic on those values.  Only the results are rounded.  The advantage
 | ||
| for inputs is that “what you type is what you get”.  A disadvantage is that the
 | ||
| results can look odd if you forget that the inputs haven’t been rounded:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">3</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.104'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'2.104'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('5.21')</span>
 | ||
| <span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'3.104'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'0.000'</span><span class="p">)</span> <span class="o">+</span> <span class="n">Decimal</span><span class="p">(</span><span class="s1">'2.104'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('5.20')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The solution is either to increase precision or to force rounding of inputs
 | ||
| using the unary plus operation:</p>
 | ||
| <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">getcontext</span><span class="p">()</span><span class="o">.</span><span class="n">prec</span> <span class="o">=</span> <span class="mi">3</span>
 | ||
| <span class="gp">>>> </span><span class="o">+</span><span class="n">Decimal</span><span class="p">(</span><span class="s1">'1.23456789'</span><span class="p">)</span>      <span class="c1"># unary plus triggers rounding</span>
 | ||
| <span class="go">Decimal('1.23')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Alternatively, inputs can be rounded upon creation using the
 | ||
| <a class="reference internal" href="#decimal.Context.create_decimal" title="decimal.Context.create_decimal"><code class="xref py py-meth docutils literal notranslate"><span class="pre">Context.create_decimal()</span></code></a> method:</p>
 | ||
| <div class="doctest highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">rounding</span><span class="o">=</span><span class="n">ROUND_DOWN</span><span class="p">)</span><span class="o">.</span><span class="n">create_decimal</span><span class="p">(</span><span class="s1">'1.2345678'</span><span class="p">)</span>
 | ||
| <span class="go">Decimal('1.2345')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>Q. Is the CPython implementation fast for large numbers?</p>
 | ||
| <p>A. Yes.  In the CPython and PyPy3 implementations, the C/CFFI versions of
 | ||
| the decimal module integrate the high speed <a class="reference external" href="https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html">libmpdec</a> library for
 | ||
| arbitrary precision correctly rounded decimal floating-point arithmetic <a class="footnote-reference brackets" href="#id4" id="id2" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>.
 | ||
| <code class="docutils literal notranslate"><span class="pre">libmpdec</span></code> uses <a class="reference external" href="https://en.wikipedia.org/wiki/Karatsuba_algorithm">Karatsuba multiplication</a>
 | ||
| for medium-sized numbers and the <a class="reference external" href="https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform">Number Theoretic Transform</a>
 | ||
| for very large numbers.</p>
 | ||
| <p>The context must be adapted for exact arbitrary precision arithmetic. <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emin</span></code>
 | ||
| and <code class="xref py py-attr docutils literal notranslate"><span class="pre">Emax</span></code> should always be set to the maximum values, <code class="xref py py-attr docutils literal notranslate"><span class="pre">clamp</span></code>
 | ||
| should always be 0 (the default).  Setting <code class="xref py py-attr docutils literal notranslate"><span class="pre">prec</span></code> requires some care.</p>
 | ||
| <p>The easiest approach for trying out bignum arithmetic is to use the maximum
 | ||
| value for <code class="xref py py-attr docutils literal notranslate"><span class="pre">prec</span></code> as well <a class="footnote-reference brackets" href="#id5" id="id3" role="doc-noteref"><span class="fn-bracket">[</span>2<span class="fn-bracket">]</span></a>:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="n">MAX_PREC</span><span class="p">,</span> <span class="n">Emax</span><span class="o">=</span><span class="n">MAX_EMAX</span><span class="p">,</span> <span class="n">Emin</span><span class="o">=</span><span class="n">MIN_EMIN</span><span class="p">))</span>
 | ||
| <span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">**</span> <span class="mi">256</span>
 | ||
| <span class="gp">>>> </span><span class="n">x</span> <span class="o">/</span> <span class="mi">128</span>
 | ||
| <span class="go">Decimal('904625697166532776746648320380374280103671755200316906558262375061821325312')</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>For inexact results, <a class="reference internal" href="#decimal.MAX_PREC" title="decimal.MAX_PREC"><code class="xref py py-const docutils literal notranslate"><span class="pre">MAX_PREC</span></code></a> is far too large on 64-bit platforms and
 | ||
| the available memory will be insufficient:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">Decimal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">3</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
 | ||
| <span class="gr">MemoryError</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>On systems with overallocation (e.g. Linux), a more sophisticated approach is to
 | ||
| adjust <code class="xref py py-attr docutils literal notranslate"><span class="pre">prec</span></code> to the amount of available RAM.  Suppose that you have 8GB of
 | ||
| RAM and expect 10 simultaneous operands using a maximum of 500MB each:</p>
 | ||
| <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
 | ||
| <span class="gp">>>></span>
 | ||
| <span class="gp">>>> </span><span class="c1"># Maximum number of digits for a single operand using 500MB in 8-byte words</span>
 | ||
| <span class="gp">>>> </span><span class="c1"># with 19 digits per word (4-byte and 9 digits for the 32-bit build):</span>
 | ||
| <span class="gp">>>> </span><span class="n">maxdigits</span> <span class="o">=</span> <span class="mi">19</span> <span class="o">*</span> <span class="p">((</span><span class="mi">500</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="o">//</span> <span class="mi">8</span><span class="p">)</span>
 | ||
| <span class="gp">>>></span>
 | ||
| <span class="gp">>>> </span><span class="c1"># Check that this works:</span>
 | ||
| <span class="gp">>>> </span><span class="n">c</span> <span class="o">=</span> <span class="n">Context</span><span class="p">(</span><span class="n">prec</span><span class="o">=</span><span class="n">maxdigits</span><span class="p">,</span> <span class="n">Emax</span><span class="o">=</span><span class="n">MAX_EMAX</span><span class="p">,</span> <span class="n">Emin</span><span class="o">=</span><span class="n">MIN_EMIN</span><span class="p">)</span>
 | ||
| <span class="gp">>>> </span><span class="n">c</span><span class="o">.</span><span class="n">traps</span><span class="p">[</span><span class="n">Inexact</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
 | ||
| <span class="gp">>>> </span><span class="n">setcontext</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
 | ||
| <span class="gp">>>></span>
 | ||
| <span class="gp">>>> </span><span class="c1"># Fill the available precision with nines:</span>
 | ||
| <span class="gp">>>> </span><span class="n">x</span> <span class="o">=</span> <span class="n">Decimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">logical_invert</span><span class="p">()</span> <span class="o">*</span> <span class="mi">9</span>
 | ||
| <span class="gp">>>> </span><span class="n">sys</span><span class="o">.</span><span class="n">getsizeof</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
 | ||
| <span class="go">524288112</span>
 | ||
| <span class="gp">>>> </span><span class="n">x</span> <span class="o">+</span> <span class="mi">2</span>
 | ||
| <span class="gt">Traceback (most recent call last):</span>
 | ||
|   File <span class="nb">"<stdin>"</span>, line <span class="m">1</span>, in <span class="n"><module></span>
 | ||
| <span class="gr">  decimal.Inexact</span>: <span class="n">[<class 'decimal.Inexact'>]</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>In general (and especially on systems without overallocation), it is recommended
 | ||
| to estimate even tighter bounds and set the <a class="reference internal" href="#decimal.Inexact" title="decimal.Inexact"><code class="xref py py-attr docutils literal notranslate"><span class="pre">Inexact</span></code></a> trap if all calculations
 | ||
| are expected to be exact.</p>
 | ||
| <aside class="footnote-list brackets">
 | ||
| <aside class="footnote brackets" id="id4" role="doc-footnote">
 | ||
| <span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id2">1</a><span class="fn-bracket">]</span></span>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.3.</span></p>
 | ||
| </div>
 | ||
| </aside>
 | ||
| <aside class="footnote brackets" id="id5" role="doc-footnote">
 | ||
| <span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id3">2</a><span class="fn-bracket">]</span></span>
 | ||
| <div class="versionchanged">
 | ||
| <p><span class="versionmodified changed">Changed in version 3.9: </span>This approach now works for all exact results except for non-integer powers.</p>
 | ||
| </div>
 | ||
| </aside>
 | ||
| </aside>
 | ||
| </section>
 | ||
| </section>
 | ||
| 
 | ||
| 
 | ||
|             <div class="clearer"></div>
 | ||
|           </div>
 | ||
|         </div>
 | ||
|       </div>
 | ||
|       <div class="sphinxsidebar" role="navigation" aria-label="Main">
 | ||
|         <div class="sphinxsidebarwrapper">
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code> — Decimal fixed-point and floating-point arithmetic</a><ul>
 | ||
| <li><a class="reference internal" href="#quick-start-tutorial">Quick-start Tutorial</a></li>
 | ||
| <li><a class="reference internal" href="#decimal-objects">Decimal objects</a><ul>
 | ||
| <li><a class="reference internal" href="#logical-operands">Logical operands</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#context-objects">Context objects</a></li>
 | ||
| <li><a class="reference internal" href="#constants">Constants</a></li>
 | ||
| <li><a class="reference internal" href="#rounding-modes">Rounding modes</a></li>
 | ||
| <li><a class="reference internal" href="#signals">Signals</a></li>
 | ||
| <li><a class="reference internal" href="#floating-point-notes">Floating-Point Notes</a><ul>
 | ||
| <li><a class="reference internal" href="#mitigating-round-off-error-with-increased-precision">Mitigating round-off error with increased precision</a></li>
 | ||
| <li><a class="reference internal" href="#special-values">Special values</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#working-with-threads">Working with threads</a></li>
 | ||
| <li><a class="reference internal" href="#recipes">Recipes</a></li>
 | ||
| <li><a class="reference internal" href="#decimal-faq">Decimal FAQ</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="cmath.html"
 | ||
|                           title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">cmath</span></code> — Mathematical functions for complex numbers</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="fractions.html"
 | ||
|                           title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">fractions</span></code> — Rational numbers</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/library/decimal.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </div>
 | ||
| <div id="sidebarbutton" title="Collapse sidebar">
 | ||
| <span>«</span>
 | ||
| </div>
 | ||
| 
 | ||
|       </div>
 | ||
|       <div class="clearer"></div>
 | ||
|     </div>  
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              >index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="fractions.html" title="fractions — Rational numbers"
 | ||
|              >next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="cmath.html" title="cmath — Mathematical functions for complex numbers"
 | ||
|              >previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
 | ||
|           <li class="nav-item nav-item-2"><a href="numeric.html" >Numeric and Mathematical Modules</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">decimal</span></code> — Decimal fixed-point and floating-point arithmetic</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>  
 | ||
|     <div class="footer">
 | ||
|     © 
 | ||
|       <a href="../copyright.html">
 | ||
|     
 | ||
|     Copyright
 | ||
|     
 | ||
|       </a>
 | ||
|      2001-2025, Python Software Foundation.
 | ||
|     <br />
 | ||
|     This page is licensed under the Python Software Foundation License Version 2.
 | ||
|     <br />
 | ||
|     Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
 | ||
|     <br />
 | ||
|     
 | ||
|       See <a href="/license.html">History and License</a> for more information.<br />
 | ||
|     
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     The Python Software Foundation is a non-profit corporation.
 | ||
| <a href="https://www.python.org/psf/donations/">Please donate.</a>
 | ||
| <br />
 | ||
|     <br />
 | ||
|       Last updated on Apr 08, 2025 (14:33 UTC).
 | ||
|     
 | ||
|       <a href="/bugs.html">Found a bug</a>?
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
 | ||
|     </div>
 | ||
| 
 | ||
|   </body>
 | ||
| </html> |