• 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.
  • 相关阅读:
    自定义View绘制字符串
    自定义View实现图片的绘制、旋转、缩放
    Android圆形图片--ImageView
    laravel安装excel功能
    jQuery修改css属性
    cssText
    MySQL 启动、关闭、选择数据库等命令
    MySQL数据文件的导入、导出
    datepicker的使用
    laravel无法显示路由界面
  • 原文地址:https://www.cnblogs.com/qqhfeng/p/5782407.html
Copyright © 2020-2023  润新知