当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python decimal.Decimal用法及代码示例


用法:

class decimal.Decimal(value='0', context=None)

value 构造一个新的 Decimal 对象。

value 可以是整数、字符串、元组、float 或另一个 Decimal 对象。如果没有给出 value,则返回 Decimal('0') 。如果 value 是字符串,则在删除前导和尾随空格字符以及下划线之后,它应该符合十进制数字字符串语法:

sign           ::=  '+' | '-'
digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
indicator      ::=  'e' | 'E'
digits         ::=  digit [digit]...
decimal-part   ::=  digits '.' [digits] | ['.'] digits
exponent-part  ::=  indicator [sign] digits
infinity       ::=  'Infinity' | 'Inf'
nan            ::=  'NaN' [digits] | 'sNaN' [digits]
numeric-value  ::=  decimal-part [exponent-part] | infinity
numeric-string ::=  [sign] numeric-value | [sign] nan

在上面出现digit 的地方也允许使用其他 Unicode 十进制数字。这些包括来自各种其他字母表的十进制数字(例如,Arabic-Indic 和梵文数字)以及全角数字 '\uff10''\uff19'

如果 valuetuple ,它应该具有三个分量,一个符号(0 表示正数或 1 表示负数)、一个 tuple 数字和一个整数 index 。例如,Decimal((0, (1, 4, 1, 4), -3)) 返回 Decimal('1.414')

如果 valuefloat ,则二进制浮点值将无损转换为其精确的十进制等效值。这种转换通常需要 53 位或更多位的精度。例如, Decimal(float('1.1')) 转换为 Decimal('1.100000000000000088817841970012523233890533447265625')

context 精度不影响存储的位数。这完全由 value 中的位数决定。例如,Decimal('3.00000') 记录所有五个零,即使上下文精度只有三个。

context 参数的目的是确定在 value 是格式错误的字符串时该怎么做。如果上下文捕获 InvalidOperation ,则会引发异常;否则,构造函数返回一个新的 Decimal ,其值为 NaN

一旦构造,Decimal 对象是不可变的。

在 3.2 版中更改:现在允许构造函数的参数是float实例。

在 3.3 版中更改:float参数引发异常,如果FloatOperation陷阱已设置。默认情况下,陷阱是关闭的。

在 3.6 版中更改:允许使用下划线进行分组,就像代码中的整数和浮点文字一样。

十进制浮点对象与其他内置数字类型(例如 floatint )共享许多属性。所有常用的数学运算和特殊方法都适用。同样,十进制对象可以被复制、 pickle 、打印、用作字典键、用作集合元素、比较、排序和强制转换为另一种类型(例如 floatint )。

Decimal 对象的算术与整数和浮点数的算术之间存在一些小的差异。当余数运算符% 应用于 Decimal 对象时,结果的符号是 dividend 的符号而不是除数的符号:

>>> (-7) % 4
1
>>> Decimal(-7) % Decimal(4)
Decimal('-3')

整数除法运算符 // 的行为类似,返回真商的整数部分(向零截断)而不是其底,以保持通常的身份 x == (x // y) * y + x % y

>>> -7 // 4
-2
>>> Decimal(-7) // Decimal(4)
Decimal('-1')

%// 运算符分别实现规范中说明的 remainderdivide-integer 操作。

十进制对象通常不能在算术运算中与浮点数或 fractions.Fraction 的实例组合:例如,尝试将 Decimal 添加到 float 将引发 TypeError 。但是,可以使用 Python 的比较运算符将 Decimal 实例 x 与另一个数字 y 进行比较。这避免了在不同类型的数字之间进行相等比较时混淆的结果。

在 3.2 版中更改:Mixed-type 之间的比较decimal.Decimal现在完全支持实例和其他数字类型。

除了标准的数值属性,十进制浮点对象还有一些专门的方法:

3.6 版中的新函数。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 decimal.Decimal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。