导读:本篇文章恰卡编程网来给大家介绍有关python浮点数精度多少的相关内容,希望对大家有所帮助,一起来看看吧。
python的浮点数运算是不是精度有问题阿
再计算机的硬件中,浮点数以二进制小数表示。比如小数
[python] view plain copy
0.125
可看做1/10+2/100+5/1000,同样的方式二进制小数
[python] view plain copy
0.001
可看做0/2+0/4+1/8。
这两个小数实际的值是相同的,唯一的不同是0.125是十进制表示,0.001是二进制表示。可是不幸的是,多数的十进制小数不能用二进制小数准确的表示。通常,你输入的十进制浮点数只能由存储在机器中的二进制浮点数近似表示。无论你使用多少位二进制数字,十进制的0.1都不能准确的由二进制小数表示,其是无限重复的小数
[python] view plain copy
0.0001100110011001100110011001100110011001100110011...
在一个运行python的典型计算机中,一个浮点数具有53位的精度,所以十进制的0.1在内部会以如下形式存储
[python] view plain copy
0.00011001100110011001100110011001100110011001100110011010
实际中,我们很容易忘记存储的数据是原始十进制的的近似表示。Python只会显示出以二进制形式存储再计算机中的真正十进制数的近似数。如
[python] view plain copy
0.1000000000000000055511151231257827021181583404541015625
其中的多数位数都不会被人使用到,所以python只显示它的四舍五入后的值
[python] view plain copy
0.1
在实际中有很多这样的例子可以说明:
[python] view plain copy
0.1 + 0.2
0.30000000000000004
[python] view plain copy
round(2.675, 2)
2.67
可以使用decimal模块,可以看到准确的浮点数的值。
[python] view plain copy
from decimal import Decimal
Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')
python浮点数精度问题
原因如下:
出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确。
比如说: 0.1是十进制,转化为二进制后它是个无限循环的数:
0.00011001100110011001100110011001100110011001100110011001100
而python是以双精度(64)位来保存浮点数,多余的位会被截掉,所以看到的是0.1,但在电脑上实际保存的已不是精确的0.1,参与运算后,也就有可能点误差。
------------------------------------------------------------------------------------------------------------------------------------
[Python3]计算高精确度的浮点数方法
decimal 模块的"getcontext"和"Decimal"方法
getcontext().prec = 2 #设置精度
------------------------------------------------------------------------------------------------------------------------------------
decimal模块中,可以通过整数,字符串或原则构建decimal.Decimal对象。如果是浮点数,特别注意因为浮点数本身存在误差,需要先将浮点数转化为字符串。
当然精度提升的同时,肯定带来的是性能的损失。在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。但是如果是大规模的科学计算,就需要考虑运行效率了。毕竟原生的float比Decimal对象肯定是要快很多的。
-------------------------------------------------------------------------------------------------------------------------------
浮点数和整数的比较
值相等,地址不同
python中保留两位小数怎么表示
这里有三种方法,
round(a,2)'%.2f' % aDecimal('5.000').quantize(Decimal('0.00'))
当需要输出的结果要求有两位小数的时候,字符串形式的:'%.2f' % a 方式最好,其次用Decimal。
需要注意的:
1. 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
2. Decimal还可以用来限定数据的总位数。
谈谈关于Python里面小数点精度控制的问题
基础
浮点数是用机器上浮点数的本机双精度(64 bit)表示的。提供大约17位的精度和范围从-308到308的指数。和C语言里面的double类型相同。Python不支持32bit的单精度浮点数。如果程序需要精确控制区间和数字精度,可以考虑使用numpy扩展库。
Python 3.X对于浮点数默认的是提供17位数字的精度。
关于单精度和双精度的通俗解释:
单精度型和双精度型,其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
相关教程推荐:Python视频教程以上就是小编分享的关于python中保留两位小数怎么表示的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
结语:以上就是恰卡编程网为大家介绍的关于python浮点数精度多少的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~