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

nim*_*6us 43 python python-3.x

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

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

Bri*_*ell 122

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

def percentage(part, whole):
  return 100 * float(part)/float(whole)
Run Code Online (Sandbox Code Playgroud)

或者,如果你想要它回答的问题是"20%的5%",而不是"20%中的5%是什么百分比"(对卡尔·史密斯的答案所启发的问题的不同解释),你会写:

def percentage(percent, whole):
  return (percent * whole) / 100.0
Run Code Online (Sandbox Code Playgroud)

  • 你可能想要添加一个if whole是0返回0,否则这将引发异常.我刚碰到这个,所以这就是为什么我让你知道! (6认同)
  • 你不需要2个演员,你可以简单地写`return 100.0*part/whole`. (5认同)

Raf*_*ler 25

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

  • @ nim6us:如果只需要打印百分比,那么Python字符串格式就有这样的指令:``{:.1%}".format(0.1234)` - >`'12 .3%'`. (29认同)
  • 我想补充一点,即使在数学中,比率也比百分比有用得多。百分比只是更多人熟悉的一种表示比率的方式。 (2认同)
  • @jfs此评论非常好,以至于IMO值得单独回答。 (2认同)

Gio*_* PY 6

用于 %

def percent(expression):
    if "%" in expression:
        expression = expression.replace("%","/100")
    return eval(expression)

>>> percent("1500*20%")
300.0
Run Code Online (Sandbox Code Playgroud)

简单的东西

>>> p = lambda x: x/100
>>> p(20)
0.2
>>> 100*p(20)
20.0
>>>
Run Code Online (Sandbox Code Playgroud)


smc*_*mci 5

一般来说,布莱恩的答案(自定义函数)是正确且最简单的事情。

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

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)
    #...
Run Code Online (Sandbox Code Playgroud)

如果您在 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__")
Run Code Online (Sandbox Code Playgroud)

  • 这里有真正先进的东西,虽然在本例中不是一个好主意,但显示了 Python 类型的真正威力! (5认同)