python中取余%
python中的整除 // 中的坑
PYTHON中三种取整函数(// int round)的区别
当Python的取余操作涉及负数时,会产生很神奇的现象:
经过百度找到[1],得到取余操作为:
但是这并不能解释为什么会有两种绝对值,于是又去搜了一下整除操作
对于负数表现为下:
将 % 之前的数称为 被取余数 ,之后的数称为 取余数 ,只考虑 除不尽 时,则有:
性质一:
性质二:
设
分别考虑 a 与 n 同号或异号时,均有:
故:
沿用性质二,设
且有
则有
(除不尽情况下)
有了以上结论,我们就可以口算得到结果:
有了以上的值,再根据 的符号确定正负
python向上取整
方法:
Python?match.ceil函数
ceil(x)函数是向上取整,即取大于等于x的最接近整数.
import math
是利用原来的向下取整的机制如果原来是
实际上Python的round()函数可以接受两个参数round(value,ndigits),第一个参数为实际操作数,第二个参数为实际保留几位,如果第二个参数不填,则默认保留到整数位.
对正数是向下取整,对负数是向上取整.
学python的一个缺点就是对数据类型的基础理解比较少,
你可以用二进制来理解下,举一个有符号的二进制为例子:
对于无符号的?0b000~0b111?来说分别有
0b000?=?0;
0b001?=?1;
比如?uint?就是?int?的无符号形式.
当相同数据为有符号形式时变为:
0b111?=?-1;
(参考原码、反码、补码)
所以根据这个规则,对float,double等数字是同理,在floor时将有符号位进行省略,如以下位运算():
0b000?1?=?0b000
0b001?1?=?0b000
有?0-0?和?1?-?0
0b010?1?=?0b001
0b011?1?=?0b001
按照这个丢失精度的方法计算负数呢?
0b111?1?=?0b111
0b110?1?=?0b111
0b101?1?=?0b110
0b100?1?=?0b110
可知:
所以对负数的?floor?会向上取整,因为丢失精度的方法是直接根据小数点截断的.
向下取整
四舍五入
向上取整
分离整数和小数
此时我们可以用built-in function int() 函数
用built-in function round() 函数
此时我们要用到模块math中的 ceil() 方法
此时我们要用到模块math中的 modf() 方法