python中的浮点数取整

做一道逆波兰表示法题目时,遇到这样一种情况:

Input:["10","6","9","3","+","-11","*","/","*","17","+","5","+"]

Output:12

Expected:22

代码如下

class Solution:
    # @param tokens, a list of string
    # @return an integer
    def plus(x, y):
        return x+y
    def minus(x, y):
        return y-x
    def mult(x, y):
        return x*y
    def divide(x, y):
        if x==0:
            exit(1)
        else:
            return int(y/x)
    operator = {"+":plus, "-":minus, "*":mult, "/":divide}
    def evalRPN(self, tokens):
        res = []
        for s in tokens:
            if s in "+-*/":
                res.append(self.operator.get(s)(res.pop(),res.pop()))
            else:
                res.append(int(s))
        return res.pop()
看到这种输出结果,第一反应就是在浮点数部分处理出现了问题,想到刚刚翻过的《 一维数组转二维数组》中提到python是向下取整的,显然在上述计算中

10 *((6 / (( 9 + 3 ) * -11 ))值为 -1 从而得出12

于是趁机整理下python关于浮点数取整的方法:

1、类型工厂函数,int(),效果:浮点数取整,如int(3.5)就返回3;数字的字符形式转换成数字,如int("35")就返回35

2、内置函数的round(),四舍五入,第二个参数是保留小数点后多少位,默认是0,如round(3.5)返回4.0,round(3.5,1)就返回3.5,不能取整

3、math模块的floor(),取小于等于的整数,如floor(3.5)返回3.0,floor(-1.5)返回-2.0,也不能取整

4、math.ceil方法向上取整

该题目解决方法:

在divide方法中改为  return int(float(y)/x)

LeetCode编译器进行 / 运算结果默认为int类型,需要强制转换为float来运算

在我用的Python3.4版本中,进行 / 运算结果默认为float类型,如果需要int结果同样需要强制转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值