1.2 decimal模块
>>> 0.1 + 0.1 +0.1 == 0.3 False >>> >>> print(0.1 + 0.1 + 0.1) 0.30000000000000004
what???
0.1 + 0.1 +0.1 == 0.3 判断为假
0.1 + 0.1 + 0.1 = 0.30000000000000004
from decimal import Decimal
>>> from decimal import Decimal
>>> Decimal('7.1') / Decimal('3.1')
Decimal('2.290322580645161290322580645')
这个demo中有3个知识点:
(1)Decimal()的参数是字符串,如果不注意这一点,把浮点数作为参数传递进来,得到的结果还是不精确的
>>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1)
Decimal('0.3000000000000000166533453694')
>>>
>>> Decimal(1.2) + Decimal(1.8)
Decimal('3.000000000000000000000000000')
>>> Decimal('1.2') + Decimal('1.8')
Decimal('3.0')
>>>
(2)计算结果返回的还是Decimal类型 ,可以用float()函数将其转换为浮点数
>>> a = Decimal('7.1') / Decimal('3.1')
>>> float(a)
2.2903225806451615
Decimal类型能通过int()转换为整型吗?
>>> b = Decimal('1.0') + Decimal('1.0')
>>> int(b)
2
>>>
>>> c = Decimal('1.0') + Decimal('1.1')
>>> int(c)
2 #哦,这样啊,转换成整数的时候是只取整数部分的,不试一下还真不知道
(3)浮点型计算中经常会遇到的一个问题,两数相除,但不能相除的情况
>>> Decimal(')
Decimal('0.6666666666666666666666666667') #小数点后面这么多位啊,可是要那么多位没什么用啊,肿么办?
可以事先自定义一下Decimal计算的精度
>>> Decimal('1.0') / Decimal('3.0')
Decimal('0.3333333333333333333333333333')
>>>
>>> from decimal import getcontext
>>> getcontext().prec = 4
>>> Decimal('1.0') / Decimal('3.0')
Decimal('0.3333')
>>>
1.2 decimal模块的更多相关文章
- 用decimal模块增加python的浮点数精度
浮点数python默认是17位精度,也就是小数点后16位(16位以后的全部四舍五入了),虽然有16位,但是这个精度越往后越不准. 如果有特殊需求,需要更多的精度,可以用decimal模块,通过更改其里 ...
- decimal模块
简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为De ...
- decimal模块 --数字的精度、保留小数位数、取整问题
开始之前需要注意一点是:精度值为数字的总位数,如:1.23, 精度值为3: 0.123,精度值也为3 1.更改默认精度值后,直接进行计算即可保留对应精度值 from decimal import ge ...
- 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
decimal 1.作用: 用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于 金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度, ...
- python decimal和fractions模块
1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个 Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于金融应用和其它需要精确十进制表达的场合, ...
- [python]decimal常用操作和需要注意的地方
decimal模块 简介 decimal意思为十进制,这个模块提供了十进制浮点运算支持. 常用方法 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要 ...
- Python3 学习第十弹: 模块学习三之数字处理
math模块 提供基础的数学函数, cos(3.14) = -0.999..(弧度制) acos(1) = 0.0 sqrt(9) = 3.0 degrees(3.14) = 179.9999..(弧 ...
- python全栈开发day29-网络编程之socket常见方法,socketserver模块,ftp作业
一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻 ...
- python的标准模块
本文用于记录python中的标准模块,随时更新. decimal模块(解决小数循环问题): >>> import decimal >>> a = decimal.D ...
随机推荐
- kafka学习
kafka名词解释和工作方式: Producer :消息生产者,就是向kafka broker发消息的客户端. Consumer :消息消费者,向kafka broker取消息的客户端 Topic : ...
- 关于awk的多文件处理
关于awk的多文件处理: awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件,如1.shell的Pathname Expansion方式:awk '{...}' *.txt # *.t ...
- shell第一篇
前两天不停的再看内核相关的内容,了解内核的形成.内核的执行流程.内核的作用,结果是舍近求远. 其实我只是想了解一下shell的工作,shell与内核有关,但并不需要我么真正去做什么,至少对于我这样额初 ...
- vs调试dll工程
dll本身是没法运行的,必须在其它工程调用dll时候才会运行. 所以,调试dll首先要将调用dll的工程和dll工程联系起来. 解决方案中添加dll工程: 现在dll 和 应用程序两个工程就都在一个解 ...
- 精通libGDX-RPG开发实战
从今天开始,我会陆陆续续做一个五脏俱全的rpg小品游戏. 素材使用<圣剑英雄传II>的素材 游戏名称< Inspiration > 教程目录(暂定): Chapter 1: 开 ...
- Chocolatey 和 Redis windows安装记录
前言 最近研究redis,发现Redis没有官方的windows版本,但MsOpenTech有一直维护对应的Redis版本,其下载地址如下: https://github.com/MSOpenTech ...
- OpenStack和Hadoop的区别
其实,OpenStack和Hadoop不是同一个层次的东西,无法比较,非要说出个区别,那就是:OpenStack是云计算管理平台,应该是属于系统级别的软件,它的主体思想是把资源进行分离,给不同的用户提 ...
- Java设计模式——代理模式
public interface People { public void work(); } public class RealPeople implements People { public v ...
- vue2.0开发时导入组件时出错
导入自定义组件时出现了如下错误 ERROR Failed to compile with 1 errors 12:35:41 This dependency was not found: * comp ...
- POJ 2125 Destroying The Graph [最小割 打印方案]
Destroying The Graph Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8311 Accepted: 2 ...