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位數字的精度。