码迷,mamicode.com
首页 > 其他好文 > 详细

1.2 decimal模块

时间:2017-12-31 10:58:41      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:部分   int   知识   导入   int()   自定义   函数   进入   第一步   

1 >>> 0.1 + 0.1 +0.1 == 0.3
2 False
3 >>> 
4 >>> print(0.1 + 0.1 + 0.1)
5 0.30000000000000004

what???

0.1 + 0.1 +0.1 == 0.3 判断为假
0.1 + 0.1 + 0.1 == 0.30000000000000004
可见Python中的浮点数的存储是不精确的。为毛捏?
因为内置的二进制浮点数实现 float是不精确的,这是二进制的问题。
 
不过直观地看上去,二进制浮点数与实际数值的差距很小。但金融应用、科学计算等需要精确十进制表达的场合就不行了,为了确保十进制数位精度,或者用户希望计算结果与手算相符的场合。Decimal 重现了手工的数学运算。 高精度使 Decimal 可以执行二进制浮点数无法进行的模运算和等值测试。
 
下面正式进入decimal模块的学习了。
第一步:国际惯例,想使用,先导入  
from decimal import Decimal
第二步:使用它

>>> from decimal import Decimal
>>> Decimal(‘7.1‘) / Decimal(‘3.1‘)
Decimal(‘2.290322580645161290322580645‘)

这个demo中有3个知识点:

  (1)Decimal()的参数是字符串,如果不注意这一点,把浮点数作为参数传递进来,得到的结果还是不精确的

    >>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1)

    Decimal(‘0.3000000000000000166533453694‘)
    >>>
    >>> Decimal(1.2) + Decimal(1.8)
    Decimal(‘3.000000000000000000000000000‘)
    >>> Decimal(‘1.2‘) + Decimal(‘1.8‘)
    Decimal(‘3.0‘)
    >>>

  (2)计算结果返回的还是Decimal类型 ,可以用float()函数将其转换为浮点数

      >>> a = Decimal(‘7.1‘) / Decimal(‘3.1‘)
      >>> float(a)
      2.2903225806451615

    Decimal类型能通过int()转换为整型吗?

      >>> b = Decimal(‘1.0‘) + Decimal(‘1.0‘)
      >>> int(b)
      2
      >>>
      >>> c = Decimal(‘1.0‘) + Decimal(‘1.1‘)
      >>> int(c)
      2                 #哦,这样啊,转换成整数的时候是只取整数部分的,不试一下还真不知道

  (3)浮点型计算中经常会遇到的一个问题,两数相除,但不能相除的情况

      >>> Decimal(‘2‘) / Decimal(‘3‘)

      Decimal(‘0.6666666666666666666666666667‘)     #小数点后面这么多位啊,可是要那么多位没什么用啊,肿么办?

    可以事先自定义一下Decimal计算的精度

      >>> Decimal(‘1.0‘) / Decimal(‘3.0‘)

      Decimal(‘0.3333333333333333333333333333‘)
      >>>
      >>> from decimal import getcontext
      >>> getcontext().prec = 4
      >>> Decimal(‘1.0‘) / Decimal(‘3.0‘)
      Decimal(‘0.3333‘)
      >>>

 

1.2 decimal模块

标签:部分   int   知识   导入   int()   自定义   函数   进入   第一步   

原文地址:https://www.cnblogs.com/avention/p/8152002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!