python中取余%
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、忻城網(wǎng)絡(luò)推廣、微信小程序開發(fā)、忻城網(wǎng)絡(luò)營銷、忻城企業(yè)策劃、忻城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供忻城建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com
python中的整除 // 中的坑
PYTHON中三種取整函數(shù)(// int round)的區(qū)別
當(dāng)Python的取余操作涉及負(fù)數(shù)時(shí),會(huì)產(chǎn)生很神奇的現(xiàn)象:
經(jīng)過百度找到[1],得到取余操作為:
但是這并不能解釋為什么會(huì)有兩種絕對(duì)值,于是又去搜了一下整除操作
在經(jīng)過百度找到[2]與[3],得知Python中的幾種取整操作:
對(duì)于負(fù)數(shù)表現(xiàn)為下:
將 % 之前的數(shù)稱為 被取余數(shù) ,之后的數(shù)稱為 取余數(shù) ,只考慮 除不盡 時(shí),則有:
性質(zhì)一:
性質(zhì)二:
設(shè)
分別考慮 a 與 n 同號(hào)或異號(hào)時(shí),均有:
故:
沿用性質(zhì)二,設(shè)
且有
則有
(除不盡情況下)
有了以上結(jié)論,我們就可以口算得到結(jié)果:
有了以上的值,再根據(jù) 的符號(hào)確定正負(fù)
python向上取整
相關(guān)推薦:《Python教程》
方法:
Python?match.ceil函數(shù)
ceil(x)函數(shù)是向上取整,即取大于等于x的最接近整數(shù)。
import math
math.ceil(float(1)/2)
是利用原來的向下取整的機(jī)制如果原來是
實(shí)際上Python的round()函數(shù)可以接受兩個(gè)參數(shù)round(value,ndigits),第一個(gè)參數(shù)為實(shí)際操作數(shù),第二個(gè)參數(shù)為實(shí)際保留幾位,如果第二個(gè)參數(shù)不填,則默認(rèn)保留到整數(shù)位。
Python3.X對(duì)于浮點(diǎn)數(shù)默認(rèn)的是提供17位數(shù)字的精度。
結(jié)果是?-4
對(duì)正數(shù)是向下取整,對(duì)負(fù)數(shù)是向上取整。
學(xué)python的一個(gè)缺點(diǎn)就是對(duì)數(shù)據(jù)類型的基礎(chǔ)理解比較少,
你可以用二進(jìn)制來理解下,舉一個(gè)有符號(hào)的二進(jìn)制為例子:
對(duì)于無符號(hào)的?0b000~0b111?來說分別有
0b000?=?0;
0b001?=?1;
0b010?=?2;
0b011?=?3;
0b100?=?4;
0b101?=?5;
0b110?=?6;
0b111?=?7;
比如?uint?就是?int?的無符號(hào)形式。
當(dāng)相同數(shù)據(jù)為有符號(hào)形式時(shí)變?yōu)椋?/p>
0b000?=?0;
0b001?=?1;
0b010?=?2;
0b011?=?3;
0b100?=?-4;
0b101?=?-3;
0b110?=?-2;
0b111?=?-1;
(參考原碼、反碼、補(bǔ)碼)
所以根據(jù)這個(gè)規(guī)則,對(duì)float,double等數(shù)字是同理,在floor時(shí)將有符號(hào)位進(jìn)行省略,如以下位運(yùn)算():
0b000??1?=?0b000
0b001??1?=?0b000
有?0-0?和?1?-?0
0b010??1?=?0b001
0b011??1?=?0b001
有?2-?1?和?3?-?1
按照這個(gè)丟失精度的方法計(jì)算負(fù)數(shù)呢?
0b111??1?=?0b111
0b110??1?=?0b111
0b101??1?=?0b110
0b100??1?=?0b110
可知:
-1?-?-1?與?-2?-?-1
-3?-?-2?與?-4?-?-2
所以對(duì)負(fù)數(shù)的?floor?會(huì)向上取整,因?yàn)閬G失精度的方法是直接根據(jù)小數(shù)點(diǎn)截?cái)嗟摹?/p>
向下取整
int(3.75)
四舍五入
round(3.75)
向上取整
math.ceil(3.75)
分離整數(shù)和小數(shù)
math.modf(3.75)
此時(shí)我們可以用built-in function int() 函數(shù)
用built-in function round() 函數(shù)
此時(shí)我們要用到模塊math中的 ceil() 方法
此時(shí)我們要用到模塊math中的 modf() 方法