精华内容
下载资源
问答
  • 99517&thanks=...<p>In the end I found that this problem only occurs when the Decimal attribute is included</p><p>该提问来源于开源项目:mysql/mysql-connector-python</p></div>
  • 主要介绍了Python模块decimal ,Python提供了decimal模块用于十进制数学计算,它具有以下特点在文中给大家详细介绍,需要的朋友可以参考下
  • Python Decimal encoding

    2021-01-08 05:44:38
    <div><p>This commit adds support for python Decimals to ujson.dumps().</p><p>该提问来源于开源项目:ultrajson/ultrajson</p></div>
  • Python Decimal

    2020-07-10 23:05:21
    今天在研究pdfplumber的时候,发现其返回的一个位置参数的type是Decimal,以前没有用过,就好奇的去查了一下,发现在运算中还挺有启发的。 介绍 Decimal类可以快速正确舍入地进行十进制浮点运算。与float相比,它...

    背景
    今天在研究pdfplumber的时候,发现其返回的一个位置参数的type是Decimal,以前没有用过,就好奇的去查了一下,发现在运算中还挺有启发的。

    介绍
    Decimal类可以快速正确舍入地进行十进制浮点运算。与float相比,它具有以下几个优点:

    • Decimal所表示的数是完全精确的。例如,浮点数1.1和2.2在计算机内存中是以二进制的形式存储的,但是这其实是一种近似,若进行加法运算1.1 + 2.2,用户往往希望的是获得3.3,通过Decimal类刚好可以实现这样的结果。若使用默认的float类型,则其结果可能不如用户所预期,而是得到3.3000000000000003
    • Decimal类包含有效位的概念,因此1.30 + 1.20的结果是2.50,保留尾随零以表示有效位。乘法也一样,和我们小学所学过的保留房是一样,保留被乘数中的所有数字的方法。 例如,1.2 * 1.2结果是1.441.20 * 1.20结果是1.4400
    • 与基于硬件的float不同,Decimal具有用户可更改的精度(默认为28位)
    >>> from decimal import *
    >>> getcontext().prec = 6
    >>> Decimal(1) / Decimal(7)
    Decimal('0.142857')
    >>> getcontext().prec = 28
    >>> Decimal(1) / Decimal(7)
    Decimal('0.1428571428571428571428571429')
    
    • Decimal数值是不可变对象。它由符号,系数和指数位组成。 为了保持有效位,系数位不会截去末尾零。
    • Decimal数值也包括特殊值例如 Infinity-InfinityNaN。该标准还区分-0+0

    一些使用样例:

    >>> getcontext().prec = 28
    >>> Decimal(10)
    Decimal('10')
    >>> Decimal('3.22')
    Decimal('3.22')
    >>> Decimal(3.14)
    Decimal('3.140000000000000124344978758017532527446746826171875')
    >>> Decimal((0, (3, 2, 5), -2))
    Decimal('3.25')
    >>> Decimal(str(2.0 ** 0.5))
    Decimal('1.4142135623730951')
    >>> Decimal(2) ** Decimal('0.5')
    Decimal('1.414213562373095048801688724')
    >>> Decimal('NaN')
    Decimal('NaN')
    >>> Decimal('-Infinity')
    Decimal('-Infinity')
    >>> Decimal('Infinity') == float("inf")
    True
    >>> Decimal('-Infinity') == float("inf")
    False
    >>> Decimal('-Infinity') == float("-inf")
    True
    
    展开全文
  • python Decimal类型

    千次阅读 2019-06-28 14:55:21
    首先我们要了解一下Decimal类型,主要是用来处理小数的,针对与浮点型我们比较熟悉flocat 这个也可以针对小数进行处理,但是他会四舍五入,如果我们会用到关于金额,或者需求要求特别精确的时候,可以用Decimal ...

    首先我们要了解一下Decimal类型,主要是用来处理小数的,针对与浮点型我们比较熟悉flocat 这个也可以针对小数进行处理,但是他会四舍五入,如果我们会用到关于金额,或者需求要求特别精确的时候,可以用Decimal

    比如:

    a = 13716487265243587
    
    a. decimal(7,2)
    
    
    
    
    
    
    
    
    
    
    13716,48
    
    

     

    展开全文
  • python-decimal

    2020-02-23 06:10:09
    目录属性函数 属性 decimal.getcontext().prec指定精度 函数 decimal.Decimal()

    属性

    decimal.getcontext().prec指定精度

    函数

    decimal.Decimal()
    展开全文
  • pythondecimal

    2020-03-15 23:51:20
    Python自带的decimal模块用于十进制数学计算,它是在浮点类型的基础上设计的,可以非常精确地在计算机中存储和计算,精度优于floating point,因为浮点数并不能精确的表示十进制数,因为计算机由底层CPU和IEEE 754...

            Python自带的decimal模块用于十进制数学计算,它是在浮点类型的基础上设计的,可以非常精确地在计算机中存储和计算,精度优于floating point,因为浮点数并不能精确的表示十进制数,因为计算机由底层CPU和IEEE 754标准通过自己的浮点单位去执行算术时的特征,因此对于精度要求高但效率不要求的场景,比如财务等,decimal可以较好的替换float类型。

            Decimal重载了简单的算术运算符,所以可以采用内置数值类型同样的方式处理 Decimal实例。Decimal构造函数取一个整数或字符串作为参数。使用浮点数创建 Decimal 之前,可以先将浮点数转换为一个字符串,使调用者能够显式地处理值得位数,还可以由元组创建,其中包含一个符号标志(0 表示正,1 表示负)、数字 tuple 以及一个整数指数。 

    >>> 
    >>> f1 = 1.23
    >>> f2 = 3.21
    >>> f1 + f2
    4.4399999999999995
    >>> 
    >>> from decimal import Decimal
    >>> from decimal import getcontext
    >>> 
    >>> d1 = Decimal('1.23')
    >>> d2 = Decimal('3.21')
    >>> d3 = d1 + d2
    >>> print(type(d3), d3)
    <class 'decimal.Decimal'> 4.44
    >>> # 很准,位数也不变
    >>> 
    >>> 
    >>> t1 = (1, (1, 1), -2)
    >>> Decimal(t1)
    Decimal('-0.11')
    >>> t2 = (1, (1, 2), 3)
    >>> Decimal(t2)
    Decimal('-1.2E+4')
    >>> t3 = (0, (1, 2), 3)
    >>> Decimal(t3)
    Decimal('1.2E+4')
    >>> 
    >>> str(f3)
    '2.468'
    >>> 

    但相除或相乘的话,小数点的位数还是变了:

    >>> 
    >>> d4 = d2 / d1
    >>> d4
    Decimal('2.609756097560975609756097561')
    >>> d3
    Decimal('4.44')
    >>> d5 = d1 * d2
    >>> d5
    Decimal('3.9483')
    >>> 

    可以通过getcontext().prec = x(x为你想要的精度来设置)来设置Decimal类型保留有效位数,注意不是保留小数的位数,如果要保留小数位数用round()。

    >>> 
    >>> context = getcontext()
    >>> context.prec = 3  # 保留3位数
    >>> print(context)
    Context(prec=3, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[InvalidOperation, DivisionByZero, Overflow])
    >>> d6 = d1 * d2
    >>> d6
    Decimal('3.95')
    >>> d7 = d2 / d1
    >>> d7
    Decimal('2.61')
    >>> d8 = d1 + d2
    >>> d8
    Decimal('4.44')
    >>> 

    由上可以看到,设置一次getcontext().prec = x后,其下面的Decimal类型全部保留了x位数,有时不需要它管辖得太广,那么我们需要用localcontext创建一个局部上下文。

    >>> from decimal import localcontext
    >>> 
    >>> with localcontext() as ctx:
    	ctx.prec = 4
    	d9 = d2 / d1
    	d10 = d1 + d2
    	print(d9, d10)
    
    	
    2.610 4.44
    >>> with localcontext() as ctx:
    	ctx.prec = 5
    	d11 = d2 / d1
    	d12 = d1 * d2
    	print(d11, d12)
    
    	
    2.6098 3.9483
    >>> 

     

    >>> from decimal import Decimal
    >>> 
    >>> v = Decimal(str(1.536842))
    >>> v1 = Decimal(str(3.0125873))
    >>> v
    Decimal('1.536842')
    >>> v1
    Decimal('3.0125873')
    >>> 
    >>> from decimal import localcontext
    >>> with localcontext() as ctx:
    	ctx.prec = 5  # 保留5位有效数字
    	v2 = v + v1
    	v3 = v * v1
    	print(v2, v3)
    
    	
    4.5494 4.6299
    >>> 
    >>> # 保留5位小数
    >>> v4 = round(float(v + v1), 5)
    >>> v4
    4.54943
    >>> v5 = round(float(v * v1), 5)
    >>> v5
    4.62987
    >>> 

    如果觉得局部上下文设置精度太不灵活,要用的时候都得设置一次,那么还可以使用实例上下文。

    >>> 
    >>> ctx1 = getcontext().copy()  # 创建一个带精度的context
    >>> ctx1.prec = 2  # 设置context精度
    >>> ctx2 = getcontext().copy()  # 创建一个带精度的context
    >>> ctx2.prec = 5  # 设置context精度
    >>> 
    >>> d13 = ctx1.create_decimal(str(f1))
    >>> d13
    Decimal('1.2')
    >>> d14 = ctx1.create_decimal(str(f2))
    >>> d14
    Decimal('3.2')
    >>> d13 + d14
    Decimal('4.4')
    >>> d13 * d14
    Decimal('3.84')
    >>> d14 / d13
    Decimal('2.67')
    >>> # 从上面看到,create_decimal创建Decimal实例时精度是对的,但是他们的实例进行算术运算后,精度就变了
    >>> d15 = ctx2.create_decimal(str(f1))
    >>> d15
    Decimal('1.23')
    >>> d16 = ctx2.create_decimal(str(f2))
    >>> d16
    Decimal('3.21')
    >>> d15 + d16
    Decimal('4.44')
    >>> d15 * d16
    Decimal('3.95')
    >>> d16 / d15
    Decimal('2.61')
    >>> 
    >>> f3 = 2.468
    >>> ctx3 = getcontext().copy()  # 创建一个带精度的context
    >>> ctx3.prec = 5  # 设置context精度
    >>> 
    >>> d17 = ctx3.create_decimal(str(f3))
    >>> d17
    Decimal('2.468')
    >>> d17 + d15
    Decimal('3.70')
    >>> d17 * d15
    Decimal('3.04')
    >>> d17 / d15
    Decimal('2.01')
    >>> 

    rounding取整,有多种选择,以保证值在所需精度范围内。
    •ROUND_CEILING 总是趋向于无穷大向上取整。
    •ROUND_DOWN 总是趋向 0 取整。
    •ROUND_FLOOR 总是趋向负无穷大向下取整。
    •ROUND_HALF_DOWN 如果最后一个有效数字大于或等于 5 则朝 0 反方向取整;否则,趋向 0 取整。
    •ROUND_HALF_EVEN 类似于 ROUND_HALF_DOWN,不过,如果最后一个有效数字值为 5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整。
    •ROUND_HALF_UP 类似于 ROUND_HALF_DOWN,不过如果最后一位有效数字为 5,值会朝 0 的反方向取整。
    •ROUND_UP 朝 0 的反方向取整。
    •ROUND_05UP 如果最后一位是 0 或 5,则朝 0 的反方向取整;否则向 0 取整。

    >>> 
    >>> import decimal
    >>> 
    >>> context = decimal.getcontext()
    >>> ROUNDING_MODES = [
      'ROUND_CEILING',
      'ROUND_DOWN',
      'ROUND_FLOOR',
      'ROUND_HALF_DOWN',
      'ROUND_HALF_EVEN',
      'ROUND_HALF_UP',
      'ROUND_UP',
      'ROUND_05UP',
      ]
    >>> context.prec = 3
    >>> for mode in ROUNDING_MODES:
    	context.rounding = getattr(decimal, mode)
    	value = decimal.Decimal(str(f3))
    	print(value)
    
    	
    2.468
    2.468
    2.468
    2.468
    2.468
    2.468
    2.468
    2.468
    >>> 
    >>> context.prec = 3
    >>> for mode in ROUNDING_MODES:
    	context.rounding = getattr(decimal, mode)
    	value = decimal.Decimal(str(f3)) / decimal.Decimal('1.25689')
    	print(value)
    
    	
    1.97
    1.96
    1.96
    1.96
    1.96
    1.96
    1.97
    1.96

    除了期望的数字值,Decimal 还可以表示很多特殊值,包括正负无穷大值、“不是一个数”(NaN)和 0,python并没有特殊的语法来表示这些特殊的浮点值,但是可以使用float()来创建它们。

    >>> import decimal
    >>> 
    >>> for value in ['Infinity', 'inf', 'NaN', 'nan', '0']:
    	print (decimal.Decimal(value), decimal.Decimal('-' + value))
    
    	
    Infinity -Infinity
    Infinity -Infinity
    NaN -NaN
    NaN -NaN
    0 -0

    与无穷大值相加会返回另一个无穷大值。与 NaN 比较相等性总会返回 false,而比较不等性总会返回 true。与 NaN 比较大小来确定排序顺序没有明确定义,这会导致一个错误。

    >>> 
    >>> decimal.Decimal('inf') + 1
    Decimal('Infinity')
    >>> decimal.Decimal('-inf') + 100
    Decimal('-Infinity')
    >>> decimal.Decimal('nan') == decimal.Decimal('inf')
    False
    >>> decimal.Decimal('nan') == decimal.Decimal('-inf')
    False
    >>> decimal.Decimal('nan') != decimal.Decimal(0)
    True
    >>> 

     

    展开全文
  • python decimal

    千次阅读 2011-09-14 10:37:34
    >>> 0.1+0.1+0.1-0.3 5.551115123125783e-17
  • python Decimal 小数

    2015-04-20 10:30:18
    Decimal示例 典型用法:Decimal(‘3.14’)>>> getcontext().prec = 28 >>> Decimal(10) Decimal('10') >>> Decimal('3.14') Decimal('3.14') >>> Decimal(3.14) Decimal('3....
  • python——decimal模块

    2020-02-20 23:58:39
    专门处理浮点型数字的模块,其精度高于python的浮点数类型。 0.1+0.1+0.1 #输出:0.30000000000000004 python浮点型数不能精确存储 常用类和方法 decimal.Decimal(builtins.object) #输入可以是int,str、tuple或...
  • Python decimal模块

    2020-07-06 23:16:39
    /usr/bin/python3 # coding:utf-8 import decimal from decimal import Decimal, getcontext def demo(): """ 取整问题: ROUND_CEILING 总是趋向无穷大向上取整 ROUND_DOWN 总是趋向0取整 ROUND_FLOOR 总是趋向负...
  • pythondecimal模块

    千次阅读 2020-04-10 21:16:24
    我们在python中如果需要处理这个问题的话就需要用到decimal模块了 但这个地方有个坑,那就是Decimal(),括号里面必须是字符串,假如我们需要通过Decimal计算的话就需要将数值转换成字符串或者直接加上引号 还可以...
  • python Decimal 使用

    2009-10-29 15:38:25
    地址:http://docs.python.org/library/decimal.html   Decimal支持大多数的数学操作。使用decimal的时候是在一个context背景下工作的。可以使用getcontext来获得当前背景:   from decimal import * c = ...
  • python decimal 精确计算

    万次阅读 多人点赞 2018-03-07 19:41:17
    经常使用的几个点1.可以传递给Decimal整型...传入浮点数 5.55In [74]: Decimal(5.55)*100Out[74]: Decimal('554.9999999999999822364316060')传入字符串 ‘5.55’In [75]: Decimal('5.55')*100Out[75]: Decimal('555...
  • Python中的Decimal

    2020-12-13 21:15:04
    四舍五入,保留几位小数5.Decimal 结果转化为string6.decimal模块进行十进制数学计算7.python decimal.quantize()参数rounding的各参数解释与行为 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为...
  • 关于python decimal用法

    2016-08-09 15:33:04
    ```import decimal print(decimal.Decimal(9.995)) ``` 请问这里的‘decimal’ 和‘Decimal’各代表的是什么?
  • PYTHON库之decimal

    2021-01-17 22:31:01
    PYTHON库之decimal 二进制的浮点数本身带有偏差,Decimal()为浮点数提供与书本数学计算习惯相一致的计算方式。 小数点有效位。严格按照数学书本的计算方式,保留尾随零,确保小数点有效位。 Decimal()可以使用...
  • python float decimal issue

    2019-10-06 02:17:57
    python float decimal issue there is a moudle named fixiedpoint in sf,it can slove part of problem ...
  • <div><p>Python 2/3 specific code has been commented and TODOs were added, according to https://github.com/python/typeshed/pull/94#issuecomment-189408778.</p><p>该提问来源于...python/typeshed</p></div>
  • 主要介绍了Python decimal模块使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python decimal精确计算 python decimal精确计算 (1). Decimal接收int和string类型参数 from decimal import * # 不能传入浮点数据,因为浮点数据就不准确 a = Decimal(3.33)*100 b = Decimal('3.33')*100 c = ...
  • python decimal(小数)模块

    千次阅读 2018-07-31 22:57:04
    在Django中遇到商品金额时只知道使用decimalfiled,但是并不是特别了解底层的python decimal模块,偶然看书学习到这块,做个记录跟博友们一起分享。 decimal 模块是python内置模块, 不需要安装,直接导入即可 ...
  • Pythondecimal模块

    千次阅读 2017-08-02 15:37:07
    1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。 2.要从浮点数据转换为Decimal类型 3.通过设定有效数字,限定结果样式: 4.四舍五入,保留几位小数 from decimal import ...
  • Python模块-decimal

    2017-07-24 15:50:00
    Python提供了decimal模块用于十进制数学计算,它具有以下特点: 提供十进制数据类型,并且存储为十进制数序列; 有界精度:用于存储数字的位数是固定的,可以通过decimal.getcontext().prec=x 来设定,不同的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,214
精华内容 885
关键字:

decimalpython

python 订阅