# -*- 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. angularjs基本执行流程

    近期温习了下angularjs执行流程,备记下.以便查看. 主要的执行流程例如以下: 1.用户请求应用起始页. 2.用户的浏览器向server发起一次HTTP连接,然后载入index.html页面,这 ...

  2. C/C++笔试准备(2)

    问题:编辑距离,是指将一个字符串变为另一个字符串,仅可以3种操作:修改一个字符,删除一个字符,插入一个字符.the变成that:删除e,插入a,插入t.20’ 实现编辑距离算法. 解算:利用动态规划的 ...

  3. 关于sed的应用

    公司让我做一个看一下在优化的程序和比原来的程序快多少,但是文件还在运行的服务器上,我需要把用到的文件复制到测试服务器上去.但是测试服务器上有的,目录不全,会导致scp出错.就发生了以下的故事. 首选我 ...

  4. DEV LookUpEdit 使用方法

    public class field { public string Name { get; set; } public string Explain { get; set; } } List< ...

  5. 五种常见的ASP.NET应用程序安全缺陷

    下面给出了五个例子,阐述如何按照上述建议增强应用程序的安全性.这些例子示范了代码中可能出现的缺陷,以及它们带来的安全风险.如何改写最少的代码来有效地降低攻击风险.1 篡改参数◎ 使用ASP.NET域验 ...

  6. Solr-4.10.2与Tomcat整合

    1.将下载的solr解压至D:\solr,拷贝d:\solr\solr-4.10.2\example\webapps\solr.war到Tomcat的webapps\目录中.直接解压 solr.war ...

  7. ORACLE SQL单行函数(二)【weber出品必属精品】

    11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...

  8. 华为oj 计算字符个数

    练手而已 #include <stdio.h> #include <string.h> int main(void) { char string[200]={'\0'}; in ...

  9. struts 2 --SEVERE: Could not find action or result

    SEVERE: Could not find action or result There is no Action mapped for namespace / and action name . ...

  10. Jobs定时器 - Quartz

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...