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(towardsInfinity),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), orROUND_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
Python2.7-decimal的更多相关文章
- Python核心编程--学习笔记--5--数字
本章的主题是Python中的数字,这里详细介绍每一种数字类型,它们适用的各种运算符,以及用于处理数字的内建函数.在本章的末尾简单介绍了几个标准库中用于处理数字的模块. 1 数字类型 数字:标量贮存,可 ...
- Python基础:02数字
1:Python标准整数类型等价于C的(有符号)长整型.整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数.八进制整数以数字“0”开始, 十六进制整数则以“0x”或“0X”开始. ...
- CentOS升级Python2.7导致使用pip等命令安装模块失败
报错如下: # pip Traceback (most recent call last): File , in <module> from pkg_resources import lo ...
- 自学Python2.1-基本数据类型-字符串str(object)
Python str方法总结 class str(object): """ str(object='') -> str str(bytes_or_buffer[, ...
- 自学Python2.1-基本数据类型-字符串方法 下
自学Python之路 自学Python2.1-基本数据类型-字符串方法 下 class str(object): """ str(object='') -> str ...
- python3.X中简单错误处理,和Python2区别
1.print 1.1 Print是一个函数 在Python3中print是个函数,这意味着在使用的时候必须带上小括号,并且它是带有参数的. >>> print 'hello wor ...
- 资深程序员告诉你为什么要用Python3而不是Python2
经常遇到这样的问题:<现在开始学习python的话,是学习python2.x还是学习python3.x比较好?>,这也是许多初学者会遇到的问题,我们的答案是python 3.x. 为了帮助 ...
- 没有神话,聊聊decimal的“障眼法”
0x00 前言 在上一篇文章<妥协与取舍,解构C#中的小数运算>的留言区域有很多朋友都不约而同的说道了C#中的decimal类型.事实上之前的那篇文章的立意主要在于聊聊使用二进制的计算机是 ...
- 让VIM支持Python2 by update-alternatives
前言 Ubuntu 16+中$ sudo apt install vim所安装的vim只支持Python3,但很多插件如YCM和powerline均需要Python2,那就来场"生命贵在折 ...
- 烂泥:python2.7和python3.5源码安装
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 前几天在centos6.6安装ansible时,一直提示python版本不对,导致不能安 ...
随机推荐
- Okhttp3 使用和原理(DEMO)
基本使用: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html http://www.jianshu.c ...
- HDU2167(SummerTrainingDay02-D 状态压缩dp)
Pebbles Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- element-ui Tag、Dialog组件源码分析整理笔记(五)
Tag 标签组件 <script> export default { name: 'ElTag', props: { text: String, closable: Boolean, // ...
- 高性能JavaScript(DOM编程)
首先什么是DOM?为什么慢? DOM:文档对象模型,是一个独立于语言的,用于操作XML和HTML文档的程序接口(API) 用脚本进行DOM操作的代价很昂贵.那么,怎样才能提高程序的效率? 1.DOM访 ...
- AngularJS学习之 ui router
1.安装 bower install --save angular_ui-router 2.在项目主页面 index.html中添加 <div ui-view="">& ...
- nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题
由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...
- 用windows浏览器打开Linux的Jupyter notebook开发、调试示例
1.场景,在windows浏览器中打开Linux环境下的jupyter notebook.Jupyter notebook开启远程服务,Spark.python计算环境在Linux服务器中,而工作环境 ...
- SQLServer 中的身份验证及登录问题
SQLServer 中的身份验证及登录问题 by:授客 QQ:1033553122 身份验证 SQL Server 支持两种身份验证模式,即Windows 身份验证模式和混合模式. Windows 身 ...
- 5,注释、分支结构、循环结构、伪“选择结构”
注释: python使用#作为行注释符,使用三引号作为多行注释符 分支结构: if-else: a=int(input("你的成绩是:")) if a>60: print(& ...
- matlab练习程序(异或分类)
clear all; close all; clc; %生成两组已标记数据 randn(); mu1=[ ]; S1=[; 0.5]; P1=mvnrnd(mu1,S1,); mu2=[ ]; S2= ...