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,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
随机推荐
- pyqt学习之列表管理器(网友提供)
# -*- coding: utf-8 -*- __author__ = 'Administrator' import sys from PyQt4.QtCore import * from PyQt ...
- Android-IM架构设计
###1. 架构总览 ###2. 模块介绍 ####2.1 协议封装与任务流程 #####1) 协议与任务的封装 a. 协议有协议头(协议头因为格式相同,被抽象出来)和协议体组成,协议有两类:请求协议 ...
- mysql常用操作(转自阿铭linux)
在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,您还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付 ...
- My way on Linux - [Shell基础] - Bash Shell中判断文件、目录是否存在或者判断其是否具有某类属性(权限)的常用方法
Conditional Logic on Files # 判断文件是否存在及文件类型 -a file exists. #文件存在 -b file exists and is a block speci ...
- 小结: Async & Await
新项目组用到Async & Await, 关于Await会不会新开不开线程,遇到什么情况会新开线程的问题网上查了很多资料都没看到直观的解释.现简单总结一下. 直接上代码: namespace ...
- 先装Net Framework 后 装 IIS的处理办法
先装IIS话,后面装Net Framework时候会自动注册 处理aspx和ashx等的处理扩展程序 先装Net Framework 后 装 IIS.扩展程序注册在命令:aspnet_regiis - ...
- AspNetPager
AspNetPager使用方法引入dll <%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer& ...
- Unable to open log device '/dev/log/main': No such file or directory
在我们使用真机进行Android应用调试时,无法获得调试信息,错误提示如下:Unable to open log device '/dev/log/main': No such file or dir ...
- WPF bitmap转bitmapimage 使用 CreateBitmapSourceFromHBitmap内存泄漏
IntPtr f = bmp.GetHbitmap(); img.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitm ...
- nginx配置时的一些问题
在配置nginx的时候出现的一些问题,在此记录: 1.如何打开nginx服务: 方法1:打开解压的下载文件,双击打开nginx.exe即可(出现闪退,我以为是出问题了,其实是服务已经启动了) 方法2: ...