对正数是向下取整,对负数是向上取整.
学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?会向上取整,因为丢失精度的方法是直接根据小数点截断的.
import math
print(r)
其中 函数fabs和abs的区别:函数fabs的作用是求浮点数x的绝对值;函数abs的作用是求x的绝对值.fabs函数原型:double fabs(double x);abs函数原型:int fabs(int x).fabs函数参数:参数x是一个浮点数;abs函数参数:参数x是一个整数
定义:大于或等于 x 的最大整数 math.ceil(x)
向上取整运算为Ceiling,用数学符号?表示
定义:小于或等于 x 的最大整数 math.floor(x)
向上取整运算为Floor,用数学符号?表示
其实反斜杠 // 也能实现向下取整:
但是在某些情况下 // 和 math.floor(x) 的实现结果又不一样:
向0取整:x为负数时向上取整,x为正数时向下取整.
python中可用 int(x) 实现,也可以用 math.modf(x) 返回一个包含小数部分和整数部分的元组.
从官方文档得知,Python中 round(x) 采用银行进位法而非传统的四舍五入.
银行进位规则:
但是!注意!:
内心中一片乌鸦飞过,说好的奇进偶舍呢?其实我内心也是奔溃的,继续找答案:
我们都知道,计算机所存储的浮点数并不是表面这么简单,他并不是一个精确值,可以用decimal模块的Decimal对象,将float数据映射为底层的更精确的表示.:
round还是那个round,过错就在于float对象"眼见而非实"上,那到底如何实现真正意义四舍五入呢?
一路写下来,结论就是float心机好深,操作真的要小心点...
以上就是土嘎嘎小编为大家整理的python取整的函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!