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版本不对,导致不能安 ...
随机推荐
- Maven构建的Spring项目需要哪些依赖?
Maven构建的Spring项目需要哪些依赖? <!-- Spring依赖 --> <!-- 1.Spring核心依赖 --> <dependency> <g ...
- js中的json的小例子
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- java设计模式(一)【六大原则】
开发一个系统并不是一件困难的事,但是为何维护好一个系统却是一件让人头疼不以的事? 在笔者的观念中这一切都源自于需求. 如果在软件开发完成之后,需求就不再改变,那大部分程序都不需要维护了.但是, ...
- Can’t connect to local MySQL server through socket的解决方法
http://www.aiezu.com/db/mysql_cant_connect_through_socket.html mysql,mysqldump,php连接mysql服务常会提示下面错误: ...
- JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))
JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...
- js-ES6学习笔记-module(1)
1.在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种.前者用于服务器,后者用于浏览器.ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可 ...
- 【代码笔记】iOS-将字符串中特定后的字变成红色
一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...
- JS 实现四舍五入保留两位小数并且添加千位分隔符
var a = "-123456789.078";a = (Math.round(a * 100) / 100).toFixed(2).toString().replace(/(\ ...
- 数据表自增Id获取时IDENTITY的正确使用方式
在SQLServer中很多表主键会设置为自增列,有的业务需求需要知道新插入的自增Id是多少,一般我们会用SELECT @@IDENTITY来获取,可由于@@IDENTITY是个全局变量作用据较大,所以 ...
- 为什么你用不好Numpy的random函数?
为什么你用不好Numpy的random函数? 在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学 ...