这篇文章主要介绍“python怎么控制输出小数精度”,在日常操作中,相信很多人在python怎么控制输出小数精度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python怎么控制输出小数精度”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
将精度高的浮点数转换成精度低的浮点数。
round()不是简单的四舍五入的处理方式。
>>> round(2.5) 2 >>> round(1.5) 2 >>> round(2.675) 3 >>> round(2.675, 2) 2.67
round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数2。
当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小树是奇数,则直接舍弃,如果偶数这向上取舍。
看下面的示例:
>>> round(2.635, 2) 2.63 >>> round(2.645, 2) 2.65 >>> round(2.655, 2) 2.65 >>> round(2.665, 2) 2.67 >>> round(2.675, 2) 2.67
效果和round()是一样的。
>>> a = ("%.2f" % 2.635) >>> a '2.63' >>> a = ("%.2f" % 2.645) >>> a '2.65' >>> a = int(2.5) >>> a 2
python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?
>>> a = "%.30f" % (1/3) >>> a '0.333333333333333314829616256247'
可以显示,但是不准确,后面的数字往往没有意义。
>>> from decimal import * >>> print(getcontext()) Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow]) >>> getcontext().prec = 50 >>> b = Decimal(1)/Decimal(3) >>> b Decimal('0.33333333333333333333333333333333333333333333333333') >>> c = Decimal(1)/Decimal(17) >>> c Decimal('0.058823529411764705882352941176470588235294117647059') >>> float(c) 0.058823529411764705
默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。
其实可以留意下context里面的这rounding=ROUND_HALF_EVEN参数ROUND_HALF_EVEN, 当half的时候,靠近even.
既然说到小数,就必然要说到整数。一般取整会用到这些函数:
这个不说了,前面已经讲过了。一定要注意它不是简单的四舍五入,而是ROUND_HALF_EVEN的策略。
取大于或者等于x的最小整数。
去小于或者等于x的最大整数。
>>> from math import ceil, floor >>> round(2.5) 2 >>> ceil(2.5) 3 >>> floor(2.5) 2 >>> round(2.3) 2 >>> ceil(2.3) 3 >>> floor(2.3) 2 >>>
到此,关于“python怎么控制输出小数精度”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。