zoukankan      html  css  js  c++  java
  • Python2.7-decimal

    decimal 模块,提供了对小数精确的计算,内置的 float 类型是以二进制的浮点数保存的,是不准确的,小数点后会有很多奇怪的数字,虽然在一般情况下计算是没问题的,因为近似相等,小数点后十几位才会出现问题。但是 decimal 模块解决了这个问题,它可以提供精确的教科书般的结果。此外,模块还提供了几个特殊数:NaN,sNaN,-Infinity,Infinity,这些结果会在异常发生但不抛出时产生。

    模块类:

    1、Decimal 对象

    decimal.Decimal([value[, context]]):用 value 以 context 规则创建一个新的 Decimal 对象,创建后此对象不会改变,context 中的精度不会影响值的存储,只有其中的异常设置会影响对象的创建。value 可以是整数,字符串,元组,浮点数或是另一个 Decimal 对象。若是元组,需要是一个三元元组,第一个是符号(0为正,1为负),第二个是数字元组,第三个是整数,代表了指数(10的几次方)

    adjusted():将指数调整至整数部分只有一位,即正常写法,返回调整后的指数值
    as_tuple():返回和创建对象时要求相同的有名字的元组(named tuple),DecimalTuple(sign, digits, exponent)
    compare(other[, context]):比较两个 Decimal 对象的数值大小,同 compare() 函数,只是他返回的是 Decimal 对象。比较对象其中一个为 NaN,结果也为 NaN
    compare_total(other):比较两个 Decimal 对象的绝对大小,和值的表现形式有关,与数值无关,即“1”和“1.0”是不一样的
    compare_total_mag(other):同上,只是忽略了两者的符号,即加了绝对值
    copy_abs(),copy_negate(),copy_sign(other):分别返回绝对值,相反数,拷贝符号,都不受 context 影响精度,不改变 flag 状态,也不会凑整
    exp([context]):返回 e 的 x 次方,结果 ROUND_HALF_EVEN 凑整
    fma(other, third[, context]):返回 self*other+third,中间结果不会凑整,所以不会出现错误
    ln([context]),log10([context]):分别返回 e 为底和 10 为底的对数结果,结果 ROUND_HALF_EVEN 凑整
    logb([context]):对非 0 对象,返回一个 Decimal 对象,值为调整后的指数。若为 0,则返回 Decimal('-Infinity'),同时 DivisionByZero 标志被激活
    next_minus([context]),next_plus([context]),next_toward(other[, context]):分别返回在特定 context 下,最大的不超过对象的值,最小的超过对象的值,最接近的朝着第二个对象方向的值
    normalize([context]):移除末尾的 0,将数字都标准化至统一格式
    number_class([context]):返回描述运算对象类型的字符串
    quantize(exp[, rounding[, context[, watchexp]]]):返回经过取整的,和第二个运算对象有相同指数的值。简单说就是指定保留几位小数
    radix():返回 Decimal(10),一般用于做基数,底数,10 的几次方
    rotate(other[, context]),shift(other[, context]):移动小数点位置,正的往右移,即数值变大,负的往左移,数值变小,rotate 只移动小数点,shift 往左移会变成 0
    same_quantum(other[, context]):比较两者指数是否相同
    scaleb(other[, context]):返回对象乘以 10的 other 次方
    sqrt([context]):返回满 context 精度的结果

    2、Context 对象

    内置有 BasicContext,ExtendedContext(所有异常都不设置),DefaultContext,这些内置对象的属性都是可以改变的

    decimal.Context(prec=None, rounding=None, traps=None, flags=None, Emin=None, Emax=None, capitals=1):创建自定义 context 对象,prec 指定精度(数字总长度),包括整数部分和小数部分,rounding 指定取整方式,traps 和 flags 设置异常的捕捉,Emin 和 Emax 设置最大最小值,capitals 设置指数大小写

    • ROUND_CEILING (towards Infinity),
    • ROUND_DOWN (towards zero),
    • ROUND_FLOOR (towards -Infinity),
    • ROUND_HALF_DOWN (to nearest with ties going towards zero),
    • ROUND_HALF_EVEN (to nearest with ties going to nearest even integer),
    • ROUND_HALF_UP (to nearest with ties going away from zero), or
    • ROUND_UP (away from zero).
    • ROUND_05UP (away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise towards zero)

    clear_flags():清楚所有 flag
    copy():返回 context 的复制
    create_decimal(num):根据 context 的要求创建 Decimal 对象,包括精度
    Decimal 对象拥有的方法它基本上也有,只是参数变成了要运算的 Decimal 对象,同时结果受到 context 各属性的影响

    3、异常对象

    decimal.Clamped:指数超出了指定范围
    decimal.DecimalException:异常基类
    decimal.DivisionByZero:除数为 0
    decimal.Inexact:发生了取整,结果不精确
    decimal.InvalidOperation:无效操作,如果没有被捕获,返回NaN
    decimal.Overflow:取整后结果超出上限
    decimal.Rounded:发生了取整,但结果可能还是精确的
    decimal.Subnormal:取整后结果超出下限
    decimal.Underflow:取整后结果变为 0

    模块方法:

    decimal.getcontext():获得当前线程的 context 属性
    decimal.setcontext(c):将当前线程的 context 属性设置为 c
    decimal.localcontext([c]):with 语句中使用,将语句块中的 context 属性设置为 c

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    kafka 官方 Quickstart
    oracle11.2 安装
    Perl参考函数/教程
    Mysql参见SHOW命令总结
    MySQL的Innodb缓存相关优化
    Oracle、Mysql和SQL Server数据库连接的URL写法
    jredis 客户端 使用
    sql基本命令-存储过程
    NoSql系列目录ElasticSearch-mongodb
    loadrunner 运行场景-Controller及Load Generators宿主主机优化
  • 原文地址:https://www.cnblogs.com/tccbj/p/8251782.html
Copyright © 2011-2022 走看看