# -*- 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. python socket学习

    import socket localip=socket.gethostbyname(socket.gethostname()) print (localip) iplist=socket.getho ...

  2. Odometer使用JavaScript和CSS制作数字滑动效果

    Odometer是一个使用JavaScript和CSS技术,制作出数字上下滑动的动画效果插件,有点类似与我们的天然气的读数的动画效果,这个插件是轻量级的,压缩版本只有3kg,使用CSS3动画技术,所以 ...

  3. 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下 ...

  4. DevExpress ASPxHtmlEditor控件格式化并导出Word (修复中文字体导出丢失)

    在前台页面中先插入一个ASPxHtmlEditor控件,名为ASPxHtmlEditor1. 我用的Dev版本为14.1 格式化文本 在后台插入如下代码  1     const string css ...

  5. vs2015升级后台mvc视图编辑器默认不是razor视图引擎问题

    1.问题的原因 vs2013中创建的mvc4.0应用默认使用的razor2.0版本 在vs2015编辑器中默认使用的razor视图引擎是3.0版本 解决方案: 第一步:升级mvc应用的版本为mvc5. ...

  6. Win7 32位系统下Java开发环境的安装及配置

    目录: Java JDK安装. Java JDK系统环境的配置. 配置常见问题的解决. Java JDK的安装 Java Jdk(Java Development Kit)Java开发不可缺少的环境, ...

  7. OD调试6—使未注册版软件的功能得以实现

    OD调试6—使未注册版软件的功能得以实现 本节使用的软件下载链接 (想动手试验的朋友可以下载来试试) 继续开始我OD调试教程的学习笔记. 本次试验对真正的程序进行逆向.(之前的都是为破解而专门设计的小 ...

  8. MYSQLI DEMO

    1.Select // DEMO mysqli连接方式参考 $db = new mysqli("localhost:3306", "root", "& ...

  9. hdu Big Number 求一个数的位数

    Problem Description In many applications very large integers numbers are required. Some of these app ...

  10. C#中KeyDown和KeyPress区别

    1.比如说TexBox 输入'a' 按下->触发KeyDown事件,然后去处理 ->将a显示输入到文本框后 ->触发KeyPress事件