zoukankan      html  css  js  c++  java
  • python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?

    1. 使用格式化(不推荐)
    
    
    
    
    
    
    
    1
    
    2
    
    3 
    
    
    >>> a = "%.30f" % (1/3)
    
    >>> a
    
    '0.333333333333333314829616256247' 
    
    
     可以显示,但是不准确,后面的数字往往没有意义。
    
    2. 高精度使用decimal模块,配合getcontext
    
    
    
    
    
    
    
    1
    
    2
    
    3
    
    4
    
    5
    
    6
    
    7
    
    8
    
    9
    
    10
    
    11
    
    12 
    
    
    >>> from decimal import *
    
    >>> print(getcontext())
    
    Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
    
    >>> getcontext().prec = 50
    
    >>> b = Decimal(1)/Decimal(3)
    
    >>> b
    
    Decimal('0.33333333333333333333333333333333333333333333333333')
    
    >>> c = Decimal(1)/Decimal(17)
    
    >>> c
    
    Decimal('0.058823529411764705882352941176470588235294117647059')
    
    >>> float(c)
    
    0.058823529411764705 
    
    
     默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。其实可以留意下context里面的这rounding=ROUND_HALF_EVEN 参数。ROUND_HALF_EVEN, 当half的时候,靠近even.
  • 相关阅读:
    Leetcode OJ: Rotate List
    Leetcode OJ: Reverse Words in a String
    Effective C++读书笔记
    word改变下划线与文字的距离
    sql 取出表中不重复的值
    Iso文件用utrliso怎么安装
    Spring注入aspectJ切面
    Spring中利用java注解声明切面
    Spring面向切面编程
    spring中部分异常
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/5782407.html
Copyright © 2011-2022 走看看