python四舍五入取整
A. 在python中,x=10.347,函数round(x,2)的返回值是
10.35。
注意!注意!注意!round()并不是四舍五入,而是向最近值取整,如果与前后两个整数的差值一样,则会取偶数的一边。
举例:round(2.5)=2, round(3.5)=4。
附我的博客:
Python3中的地板除与浮点数四种取整方式
B. python中{1,2,3,4}是什么数据类型
python中1234数据类型是整数int函数,浮点型布尔型复数型。整型就是整数类型的数,同数学里的十进制数好比表示年龄序号等优化,浮点型就是带小数点的数同数学中的小数,好比表示圆周率3点1四重力加速度9点8等。
python中1234数据类型的特点
主要特别的地方就是float类型的数有一个函数round可以取整,roundab对float类型的数值a进行操作,小数点后保留b位有效数字四舍五入默认为1,complex类型也算是比较特殊的,Python中字符串可以进行直接的相加操作s加s1返回一个新的字符串stringstringpython中。
上面加小括号不加小括号都是正确的,以逗号隔开默认为元组,元组有个比较特别的规定元组中元素不允许被修改,典型的keyvalue类型数据,注意几点其中key的值必须唯一,但是value的值可以不唯一,用花括号进行包含花括号后加分号结尾。
C. python 为什么算除法自动取整了。如图,计算10/a 自动保留到整数了。
在2.x版本都是这样,会自动取整。
在3.x版本以上改了,结果保留浮点数。系统本身设计就这样的。可以认为是开发python语言的开发者们任性,所以就这样了
附:pyhton中除法的余数
v2.2以前,除(“/”)运算符的返回有两种可能情况,分别是整型和浮点型。操作数的不同,是影响计算结果数据类型的关键。
以a/b为例,a、b均为整型,则结果返回整型;a、b任意一个是浮点型的话,则结果就是浮点型。
===========================
#pythonv2.7
>>>3/2,3.0/2,3.0/2.0
(1,1.5,1.5)
===========================
在某些场合,我们可能会期待a/b返回浮点型,可是由于某些不确定的因素,参与运算的a和b都是整型,这可能会带来错误,显然有精度上的损失。
v2.2以后,引入了“地板除”(“//”)运算符,从数值上讲,它返回小于除法运算结果的最大整数;从类型上讲,与"/"运算符返回类型逻辑一致。
而“/”运算符,没有变化。
===========================
#pythonv2.7
>>>3/2,3.0/2,3//2,3.0//2
(1,1.5,1,1.0)
===========================
v3.x以后,“/”运算符被命名为“真除”,不再依据操作数类型选择返回值类型,保证计算结果数值上的精度是第一位的。所以,无须再把操作数转变成浮点型,以保证运算结果不被截断小数部分。
“//”运算符,不变。
===========================
#pythonv3.2
>>>3/2,3.0/2,3//2,3.0//2
(1.5,1.5,1,1.0)
===========================
D. python怎么四舍五入取整
舍入 int (3.75)舍入(3.75)舍入数学 ceil (3.75)分隔整数和小数. modf (3.75)
E. 简单python代码问题
你的代码确实错了几处。
sqrt()是math中的函数,使用时应该为math.sqrt()
math.sqrt()的计算结果为浮点数,肯定不是int型的。
你的思想是把完全平方数开方,这样应该得到一个小数部分为0的数。但小数部分为0,不一定是int型,int型并不是整数的意思。即1.0不是int型。此外,浮点数是有计算精度的,你做开方运算,有时候即便这个数明明就是个完全平方数,但计算机也很难得到一个恰好是小数部分为0的结果,而是诸如9.9999999999953的结果。所以,你的这种方法有一定局限性。
基于你的思路,不妨做一下修正。首先,按你的思路计算开平方,这样原则上应该得到一个小数部分为0或者至少也是极其接近于小数部分为0的数。此时,对这个数四舍五入取整,然后再求其平方,看它是不是等于你的完全平方数即可。程序如下:
In[37]:importmath
In[38]:foriinrange(10000):
....:ifround(math.sqrt(i+100))**2==(i+100):
....:ifround(math.sqrt(i+268))**2==(i+268):
....:printi
....:
21
261
1581
F. python 如何控制输出的小数长度
Python里面小数点长度精度控制方法:
一、要求较小的精度
将精度高的浮点数转换成精度低的浮点数。
1.round()内置方法
这个是使用最多的,刚看了round()的使用解释,也不是很容易懂。round()不是简单的四舍五入的处理方式。
For the built-in types supporting round(), values are rounded to the
closest multiple of 10 to the power minus ndigits; if two multiples are equally
close, rounding is done toward the even choice (so, for example, both round(0.5)
and round(-0.5) are 0, and round(1.5) is 2).
>>> round(2.5)
2
>>> round(1.5)
2
>>> round(2.675)
3
>>> round(2.675, 2)
2.67
round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数,这就是为什么round(2.5)
=
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
2. 使用格式化
效果和round()是一样的。
>>> a = ("%.2f" % 2.635)
>>> a
'2.63'
>>> a = ("%.2f" % 2.645)
>>> a
'2.65'
>>> a = int(2.5)
>>> a
2
二、要求超过17位的精度分析
python默认的是17位小数的精度,但是这里有一个问题,就是当我们的计算需要使用更高的精度(超过17位小数)的时候该怎么做呢?
1. 使用格式化(不推荐)
>>> a = "%.30f" % (1/3)
>>> a
'0.'
可以显示,但是不准确,后面的数字往往没有意义。
2. 高精度使用decimal模块,配合getcontext
>>> 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.')
>>> c = Decimal(1)/Decimal(17)
>>> c
Decimal('0.')
>>> float(c)
0.058823529411764705
默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。其实可以留意下context里面的这rounding=ROUND_HALF_EVEN
参数。ROUND_HALF_EVEN, 当half的时候,靠近even.
三、关于小数和取整
既然说到小数,就必然要说到整数。一般取整会用到这些函数:
1. round()
这个不说了,前面已经讲过了。一定要注意它不是简单的四舍五入,而是ROUND_HALF_EVEN的策略。
2. math模块的ceil(x)
取大于或者等于x的最小整数。
3. math模块的floor(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
>>>
G. Python几种取整的方法
向下取整
int(3.75)
四舍五入
round(3.75)
向上取整
math.ceil(3.75)
分离整数和小数
math.modf(3.75)
H. python 整列数据怎么四舍五入保留整数
df.列名 = df.列名.apply(lambda x: round(x,0))
出来的结果数字会带.0,如果要去掉,则可以用
df.列名 = df.列名.apply(lambda x: int(x))
I. python中四舍五入函数取整为什么要加减0.5
是利用原来的向下取整的机制如果原来是<0.5的,那加上0.5还是没进位。
实际上Python的round()函数可以接受两个参数round(value,ndigits),第一个参数为实际操作数,第二个参数为实际保留几位,如果第二个参数不填,则默认保留到整数位。
Python3.X对于浮点数默认的是提供17位数字的精度。