deciaml(十进制浮点运算)
# -*- coding: utf-8 -*-
# ==================== #File: python #Author: python #Date: 2014 #====================
# __author__ = 'Administrator' #第一个个模块
import decimal
# #当需要解决问题时,python会采用一些内置模块来处理整形和浮点类,当需要精度很高时,使用decimal和fractions模块很有用,小数与分数部分算术保证精度,但速度比不了float快 #decimal:定点数和浮点数运算 #版本2.4以后 #特点:实现定点与浮点算术运算 #第一个方法Decimal类实例,构造函数取一个整数或者字符串作为参数,使用浮点数创建Decimal之前,可以先将浮点数转换一个字符口中 ,使调用都能够显式处理值的位数,如果是硬件浮点则无法准确表述 #属性:from_float()可以转换为精确的小数 fmt='{0:<25}{1:<25}' print fmt.format('input','output') print fmt.format('-'*25,'-'*25) #int print fmt.format(5,decimal.Decimal(5)) #str print fmt.format('3.14',decimal.Decimal('3.14')) #float f=0.1 print fmt.format(repr(f),decimal.Decimal(str(f))) print fmt.format('%.23g'%f,str(decimal.Decimal.from_float(f))[:25]) #浮点数0.1并不表示为一个二进制值,所以float与Decimal值不同,在这输出中它被截断是25个字符 #Decimal还可以由元组创建,包含一个符号标志(0表示正,1表示负),数字tuple以及一个整数指数
t=(1,(1,1),2)
print t
print decimal.Decimal(t)
# #基于元组表示创建时不太方便,不过它提供了一种可移植的方式,可以导出小数值而不会损失精度 #算术运算 #Decimal重载简单的算术运算
a=decimal.Decimal('5.1')
b=decimal.Decimal('4.9')
c=1
d=9
print repr(a)
print repr(b)
print repr(c)
print repr(d)
print a+b,a-b,a*b,a/b
print a+c,a-c
try:
print a+d
except TypeError,e:
print e
#还接受整数参数,不过浮点值必须转换为Decimal实例 from decimal import * a=Decimal('5.1') b=Decimal('4.9') c=4 d=6.0 print a+b print a-b print a*b
print a*c,a+c #特殊值{非重点} #除了期望和数字值,不可以表示很多特殊值,包括正负无穷力,不是一个数和0 for valie in ['infinity','NaN','0']: print decimal.Decimal(valie),decimal.Decimal('-'+valie) print (decimal.Decimal('infinity')+1) print (decimal.Decimal('-infinity')+1) #与无穷大值相加会返回另一个无穷大值,与NaN比较相等性总会返回flase,反之为true,但比较实在没什么意义 #上下文(非重点) #比如保持精度,错误处理等,应用于一个线程中的所有Decimal实例或者局部一个小代码区域 #方法:getcontext() print u'上下文' import pprint context=decimal.getcontext() print context.Emax print context.Emin print context.capitals print context.prec print context.rounding pprint.pprint(context.flags) print '=' pprint.pprint(context.traps) #精度:prec属性:控制着作为算术运算结果所创建的新值精度,字面量值会按这个属性保持精度 d=decimal.Decimal('0.123456') for i in range(4): decimal.getcontext().prec=i print i,':',d,d*i #如果要改变精度,就直接给这个属性赋一个新值 #整形 """ ROUND_CEILING 总是趋向无穷大向上取整 ROUND_DOWN 总是趋向0取整 ROUND_FLOOR 总是趋向负无穷大向下取整 ROUND_HALF_DOWN 如果最后一个有效数字大于或者等于5则朝0反方取整,否则,趋向0取整 ROUND_HALF_EVEN 类似ROUND_HALF_DOWN ,不过 ,如果最后一个有效数字值为5,则会检查前一位,偶数值会导致结果向下取整,奇数则向上取整 ROUND_UP 朝0反方面取整 ROUND_05UP 如果最后一位是0或者5时,则fje0r反方向取整,否则向0取整 """
context = decimal.getcontext()
ROUNDING_MODES = [ 'ROUND_CEILING', 'ROUND_DOWN', 'ROUND_FLOOR', 'ROUND_HALF_DOWN', 'ROUND_HALF_EVEN', 'ROUND_HALF_UP', 'ROUND_UP', 'ROUND_05UP', ]
header_fmt = '{0:20} {1:^10} {2:^10} {3:^10}'
print 'POSITIVES:'
print header_fmt.format(' ', '1/8 (1)', '1/8 (2)', '1/8 (3)')
print header_fmt.format(' ', '-' * 10, '-' * 10, '-' * 10)
for rounding_mode in ROUNDING_MODES:
print '{0:20}'.format(rounding_mode),
for precision in [ 1, 2, 3 ]:
context.prec = precision
context.rounding = getattr(decimal, rounding_mode)
value = decimal.Decimal(1) / decimal.Decimal(8)
print '{0:<10}'.format(value),
print 'NEGATIVES:'
print header_fmt.format(' ', '-1/8 (1)', '-1/8 (2)', '-1/8 (3)')
print header_fmt.format(' ', '-' * 10, '-' * 10, '-' * 10)
for rounding_mode in ROUNDING_MODES:
print '{0:20}'.format(rounding_mode),
for precision in [ 1, 2, 3 ]:
context.prec = precision
context.rounding = getattr(decimal, rounding_mode)
value = decimal.Decimal(-1) / decimal.Decimal(8)
print '{0:<10}'.format(value),
#局部上下文 #2.5之后,可以使用with语句进行上下文
with decimal.localcontext() as c:
c.prec=2
print c.prec
print (decimal.Decimal('3.14')/3)
print decimal.getcontext().prec
print (decimal.Decimal('3.14')/3) #Context支持with使用上下文管理器api,所以这个设置只能在块内使用 #更多请访问文档:https://docs.python.org/2.7/library/decimal.html?highlight=decimal#decimal.BasicContext
#和这边:http://pymotw.com/2/decimal/
deciaml(十进制浮点运算)的更多相关文章
- [python]decimal常用操作和需要注意的地方
decimal模块 简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要 ...
- Python基础:数值(布尔型、整型、长整型、浮点型、复数)
一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...
- python内建函数-数字相关
本篇对于数字有关的内置函数进行总结. 数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换.同时这些函数也接受字符串参数,返回字符 ...
- Python核心编程--学习笔记--5--数字
本章的主题是Python中的数字,这里详细介绍每一种数字类型,它们适用的各种运算符,以及用于处理数字的内建函数.在本章的末尾简单介绍了几个标准库中用于处理数字的模块. 1 数字类型 数字:标量贮存,可 ...
- Python:数字
一.数字简介 数字可以直接访问,是不可更改并且不可分割的原子类型,这些在标准类型的分类中都谈到了.不可更改意味着变更数字值的实质是新对象的创建.当然,这些对于程序员来说都是透明的,不需过多考虑. 1. ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- Python核心编程读笔 4
第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
随机推荐
- Learning Lua Programming (3) iMac下搭建Lua脚本最好的编码环境(代码补全,编译运行)
这篇文章参考自http://blog.sina.com.cn/s/blog_991afe570101rdgf.html,十分感谢原作者的伟大创造,本人亲测可行. 这篇文章记录一下如何在MAC系统环境下 ...
- poj 2041 Unreliable Message 字符串处理
水的问题.直接附着到代码. //poj 2041 //sep9 #include <iostream> using namespace std; char mode[128]; char ...
- Java第三周学习日记
Day01 1.线程 进程:进程就是正在运行的应用程序.进程负责了内存空间的划分. 线程:一个进程中的代码是由线程去执行的,线程也就是其中一个执行路径. 多线程:一个进程中有多个线程可以同时执行任务. ...
- LDAP禁止匿名访问
LDAP默认是允许用户匿名访问的,如下图:在使用工具连接时,勾选匿名绑定后,不需要输入UserDN和密码就可能连接到LDAP服务器,但是只能进行read及search操作.不能做任何的修改及删除操作. ...
- Word文档分割总结
Word文档分割总结 方法: 1. word创建子文件实现文件分割 2. VBA实现 3. 网上分割合并的插件软件 一. word创建子文件实现文件分割 打开需要分割的文件 >> 视图 & ...
- [C#][Database]C#通过ODBC以自定义端口连接数据库
数据库端的配置暂且不说,比较简单,新建用户并开启相应连接权限即可. 通过ODBC连接数据库,重点在于Connection String的书写,在此可以查到几乎所有类型的Data Server的Conn ...
- 去空格 whitespaceAndNewlineCharacterSet
http://blog.csdn.net/worn_nest/article/details/10155495
- 图片拉伸(有保护区域) resizableImageWithCapInsets
在仿写QQ会话的时候背景蓝色图片是拉伸而来,但是有些地方是受保护的不能拉伸 所以定义了下面的工具类中的一个方法,专门拉伸图片 UIImageResizingModeStretch:拉伸模式,通过拉伸U ...
- js中:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 洛谷 P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...