是否有运算符来计算Python中的百分比?

时间:2011-05-13 21:30:57

标签: python python-3.x

我最近了解到,“%”符号用于计算Python中整数的余数。但是,我无法确定是否有另一个运算符或方法来计算Python中的百分比。

与“/”一样,它会给你商,如果你只使用一个整数的浮点数,它实际上会给你像传统除法的答案。那么有一种方法可以计算出百分比吗?

5 个答案:

答案 0 :(得分:111)

您可以将两个数字除以并乘以100.请注意,如果“整数”为0,则会抛出错误,因为询问0的百分比是多少是没有意义的:

def percentage(part, whole):
  return 100 * float(part)/float(whole)

或者,如果您想要回答的问题是“20%的5%”,而不是“20%中的5%”(对Carl Smith's answer启发的问题的不同解释),您会写:

def percentage(percent, whole):
  return (percent * whole) / 100.0

答案 1 :(得分:24)

Python中没有这样的运算符,但是单独实现它是微不足道的。在计算实践中,百分比并不像模数那样有用,所以我所能想到的任何语言都没有实现。

答案 2 :(得分:3)

布莱恩的回答(一个自定义函数)是一般的正确和最简单的事情。

但是,如果确实想要使用(非标准)'%'运算符来定义数字类型,就像桌面计算器一样,那么'X%Y'表示X * Y / 100.0然后从Python 2.6开始,您可以重新定义the mod() operator

import numbers

class MyNumberClasswithPct(numbers.Real):
    def __mod__(self,other):
        """Override the builtin % to give X * Y / 100.0 """
        return (self * other)/ 100.0
    # Gotta define the other 21 numeric methods...
    def __mul__(self,other):
        return self * other # ... which should invoke other.__rmul__(self)
    #...

如果您在MyNumberClasswithPct与普通整数或浮点数的混合使用'%'运算符,这可能会很危险。

这段代码的繁琐之处在于你还必须定义Integral或Real的所有其他21种方法,以避免在实例化时出现以下烦人且模糊的TypeError

("Can't instantiate abstract class MyNumberClasswithPct with abstract methods __abs__,  __add__, __div__, __eq__, __float__, __floordiv__, __le__, __lt__, __mul__,  __neg__, __pos__, __pow__, __radd__, __rdiv__, __rfloordiv__, __rmod__, __rmul__,  __rpow__, __rtruediv__, __truediv__, __trunc__")

答案 3 :(得分:1)

我认为问题已经解决了......无论如何,我想到了这个解决方案:

def percent(string="500*22%"):
    if "%" == string[-1] and "*" in string:
        getnum = string[:-1]
        ops = getnum.split("*")
        result = int(ops[0]) * int(ops[1]) / 100
        print("The {}% of {} is {}".format(ops[1], ops[0], result))
        return result
    else:
        print("The argument must be a string like '500*22%'")

percent("1200*30%")
  

[输出]:

     

1200的30%是360.0

使用班级

class Percent:
    def __init__(self, operation="500*22%"):
        self.operation = operation
        if "%" == self.operation[-1] and "*" in self.operation:
            getnum = self.operation[:-1]
            ops = getnum.split("*")
            base = int(ops[0])
            percentage = int(ops[1])
            self.result = base * percentage / 100
            self.description = "The {}% of {} is {}".format(*ops, self.result)
        else:
            print("The argument must be a string like '500*22%'")


x = Percent("1200*30%")
print(x.result)
print(x.description)

输出

360.0

30%的1200%是360.0

答案 4 :(得分:1)

使用 lambda 运算符可以非常快速,排序地实现代码。

In [17]: percent = lambda part, whole:float(whole) / 100 * float(part)
In [18]: percent(5,400)
Out[18]: 20.0
In [19]: percent(5,435)
Out[19]: 21.75