# -*- 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

print a+b,a-b,a*b,a/b

print

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

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

print

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),

print

#局部上下文 #2.5之后,可以使用with语句进行上下文

with decimal.localcontext() as c:

c.prec=2

print c.prec

print (decimal.Decimal('3.14')/3)

print

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(十进制浮点运算)的更多相关文章

  1. [python]decimal常用操作和需要注意的地方

    decimal模块 简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要 ...

  2. Python基础:数值(布尔型、整型、长整型、浮点型、复数)

    一.概述 Python中的 数值类型(Numeric Types)共有5种:布尔型(bool).整型(int).长整型(long).浮点型(float)和复数(complex). 数值类型支持的主要操 ...

  3. python内建函数-数字相关

    本篇对于数字有关的内置函数进行总结. 数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换.同时这些函数也接受字符串参数,返回字符 ...

  4. Python核心编程--学习笔记--5--数字

    本章的主题是Python中的数字,这里详细介绍每一种数字类型,它们适用的各种运算符,以及用于处理数字的内建函数.在本章的末尾简单介绍了几个标准库中用于处理数字的模块. 1 数字类型 数字:标量贮存,可 ...

  5. Python:数字

    一.数字简介 数字可以直接访问,是不可更改并且不可分割的原子类型,这些在标准类型的分类中都谈到了.不可更改意味着变更数字值的实质是新对象的创建.当然,这些对于程序员来说都是透明的,不需过多考虑. 1. ...

  6. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  7. Python核心编程读笔 4

    第五章 数字 二.整形 1 布尔型 2 标准整数类型 3 长整型 数字后面加L,能表示非常非常大的数字 目前,整形和长整型逐渐统一!!! 三.双精度浮点数 四.复数 有关复数的几个概念: 表示虚数的语 ...

  8. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  9. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

随机推荐

  1. MyBatis配置解析

    MyBatis配置文件解析(概要) 1.configuration:根元素 1.1 properties:定义配置外在化 1.2 settings:一些全局性的配置 1.3 typeAliases:为 ...

  2. (转)Android’s HTTP Clients

    转载自:http://android-developers.blogspot.com/2011/09/androids-http-clients.html Most network-connected ...

  3. Javascript:字符串分割split()妙用

    概述: split() 方法将字符串分割为字符串数组,并返回此数组 语法格式: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...

  4. THINKPHP之控制器

    如何新增控制器? 在Lib/Action中新增一个控制器:ProductAction.class.php: <?php class ProductAction extends Action{   ...

  5. JavaScript学习总结(二)

    JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...

  6. vsftp虚拟用户登录配置详解

    一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...

  7. javascript将毫秒还原为可读时间格式

    <script type="text/javascript"> //随便设置一个时间 var otime = new Date("2015-11-11 20: ...

  8. 分享一个通用的分页SQL

    又很久没写博客,今天记录一个SQLserver通用分页存储过程(适用于SqlServer2000及以上版本) 1.支持连表 2.支持条件查询 USE [MYDB] GO /****** Object: ...

  9. 从字节理解Unicode(UTF8/UTF16)

    如果你不知道或者不了解什么是Unicode/UTF8/UTF16,请详细阅读这篇文章(这也是这篇博文的先决条件): 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 但是如果你看完以上文章 ...

  10. C#设置textboox只能输入数字`

    1.在闪电KeyPress事件中添加 private void textBox_pwmx_fre_KeyPress(object sender, KeyPressEventArgs e) { //如果 ...