本文将介绍Python中 “小数 “模块的运用指南。它能够用来对浮点数或含有小数点的数字进行各种数学运算。本文的一切代码样本都是在Ubuntu 21.04上用Python 3.9.5测验的。

关于小数模块

小数模块,顾名思义,能够用来处理有小数点的数字或起浮型数字。该模块中包括的办法有助于对小数点数字进行四舍五入,转换数字和进行算术核算。它还十分注重精确性和精确性,小数点后的每个数字都被认为是重要的。小数点模块认为1.40这样的数字是1.40,而不是1.4。小数点模块的运用能够经过实例得到最好的理解。下面将对其间的一些例子进行解释。

运用十进制模块进行根本的数学核算

你能够在Python中调用十进制结构函数来将一个数字转换为十进制类型。下面的代码示例显现了在整数类型的数字上进行的根本数学除法和小数类型的数字之间的区别。

from decimal import Decimal
a = 10
b = 11
c = a / b
d = Decimal(a) / Decimal(b)
print (c, type(c))
print (d, type(d))

第一条语句从十进制模块中导入十进制类。接下来,两个变量 “a “和 “b “被创立,带有一些值。变量 “c “存储了一个由变量a除以b发生的数值,然后重复相同的过程,将数字转换为十进制类型目标。运转上述代码示例后,你应该得到以下输出。

0.9090909090909091 <class 'float'>
0.9090909090909090909090909091 <class 'decimal.Decimal'>

正如你在上面的输出中看到的,float类型目标显现的数字比十进制类型目标的精度要低,因为它运用了比十进制类型目标更积极的近似办法。默许情况下,Python中的十进制类型数字最多显现28个数字。你能够经过调用十进制模块中的 “getcontext “办法依据你的需求改动这个值。

from decimal import Decimal
from decimal import getcontext
getcontext().prec = 50
a = 10
b = 11
c = a / b
d = Decimal(a) / Decimal(b)
print (c, type(c))
print (d, type(d))

在上面的代码示例中,getcontext函数现已被导入,并且精度方位现已被设置为最多50个方位。getcontext办法能够用来检查线程中的当时上下文,并改动小数模块的一些默许装备参数。运转上述代码示例后,你应该得到以下输出。

0.9090909090909091 <class 'float'>
0.90909090909090909090909090909090909090909090909091 <class 'decimal.Decimal'>

你能够用十进制类型的目标进行任何类型的算术核算,就像你在Python中用float类型的目标进行核算一样。十进制类型目标中大量的尾部小数能够带来精确的数字,在金融、管帐、关键任务的科学运用等方面特别有用。

注意,你能够经过调用主Decimal结构函数,从浮点数、整数和包括数字的字符串中创立十进制类型的数字。

运用十进制模块对数字进行舍入

十进制模块带有一些预定义的四舍五入形式,你能够用这些形式来放弃带有小数点的数字。这些形式被称为 ROUND_FLOOR, ROUND_CEILING, ROUND_HALF_DOWN, ROUND_HALF_UP, ROUND_UP, ROUND_DOWN, ROUND_HALF_EVEN, 和 ROUND_05UP。依据Python官方文档,下面是这些形式的各自作用。

  • ROUND_FLOOR: 数值被四舍五入到负无穷大。
  • ROUND_CEILING: 数字被四舍五入到无穷大或正无穷大。
  • ROUND_HALF_DOWN: 数字被四舍五入到最近的数字。假如有一个平局,数字被四舍五入到零。平局是指能够向上或向下舍入的等距数字。例如,像4.25这样的数字能够向4.2和4.3四舍五入。
  • ROUND_HALF_UP:数字被四舍五入到最近的数字。假如呈现平局,则从零开始取整。
  • ROUND_UP: 数字从零开始四舍五入。
  • ROUND_DOWN: 数字被四舍五入到零。
  • ROUND_HALF_EVEN: 数字被四舍五入到最近的数字。任何并列的数字都被四舍五入为最接近的偶数整数。
  • ROUND_05UP: 假如最后一个数字是0或5,则从零开始取整。假如不是,那么数字将被四舍五入为零。

下面的代码示例显现了这些形式的行为。

import decimal
from decimal import Decimal
from decimal import getcontext
getcontext().prec = 2
getcontext().rounding = decimal.ROUND_FLOOR
print (Decimal(3.961) + Decimal(0))
getcontext().rounding = decimal.ROUND_CEILING
print (Decimal(3.961) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_DOWN
print (Decimal(3.705) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_UP
print (Decimal(3.775) + Decimal(0))
getcontext().rounding = decimal.ROUND_UP
print (Decimal(3.775) + Decimal(0))
getcontext().rounding = decimal.ROUND_DOWN
print (Decimal(3.609) + Decimal(0))
getcontext().rounding = decimal.ROUND_HALF_EVEN
print (Decimal(3.665) + Decimal(0))
getcontext().rounding = decimal.ROUND_05UP
print (Decimal(3.675) + Decimal(0))

这个代码示例十分直接。为四舍五入的数字设置了2位的精度。经过设置 “四舍五入 “目标(主上下文的一部分)的值来改动舍入办法。运转上述代码样本后,你应该得到以下输出,其间每一行都对应着各自的四舍五入形式。

3.9
4.0  
3.7  
3.8  
3.8  
3.6  
3.7  
3.6

运用量化办法进行舍入

你也能够运用十进制模块中的 “量化 “办法对数字进行舍入。这个过程与上面解释的办法相同。但是,你能够供给一个指数作为量化办法的参数,将一个数字四舍五入到一个特定的方位,而不是独自设置精度的数字。下面是一个代码示例。

import decimal
from decimal import Decimal
rounded = Decimal(3.961).quantize(Decimal('1.0'), rounding=decimal.ROUND_FLOOR)
print (rounded)

指数’1.0’已被供给给quantize办法,四舍五入办法已被作为额外参数供给。它将回来一个X.X格局的数字。运转上述代码样本后,你应该得到以下输出。

3.9

比较两个十进制数字

你能够运用小数模块中的 “比较 “办法来比较任何两个小数类型的目标。下面的例子显现了它的用法。

from decimal import Decimal
print (Decimal(1.2).compare(Decimal(1.1)))
print (Decimal(1.0).compare(Decimal(1.1)))
print (Decimal(1.0).compare(Decimal(1.0)))

你能够在一个十进制类型的目标上调用比较办法,并供给另一个数字作为参数。依据被比较的数字,将回来一个0、1或-1的值。值为0表明两个数字持平,值为1表明第一个数字大于第二个数字,值为1表明第一个数字小于第二个数字。 运转上述代码样本后,你应该得到以下输出。

1
-1  

结论

虽然小数点模块最常被用来操控小数点的精度和对小数点后的数字进行四舍五入,但它也有一些其他有用的办法,能够进一步用来操作小数点数字,以发生精确的算术核算结果。本文现已介绍了小数点模块的根本用法,对大多数情况来说应该是足够了。