繁体   English   中英

Python中是否有算子计算百分比?

[英]Is there an operator to calculate percentage in Python?

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

就像“/”会给你商数一样,如果你只是对其中一个整数使用浮点数,它实际上会给你像传统除法一样的答案。 那么有没有办法计算百分比呢?

您可以将两个数字相除并乘以 100。请注意,如果“整数”为 0,这将引发错误,因为询问数字是 0 的百分比是没有意义的:

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

或者以 % 结尾:

 def percentage(part, whole):
  Percentage = 100 * float(part)/float(whole)
  return str(Percentage) + “%”

或者,如果您希望它回答的问题是“20 的 5% 是多少”,而不是“20 的 5 的百分比是多少”(受Carl Smith 的回答启发的对问题的不同解释),您可以这样写:

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

Python 中没有这样的操作符,但是自己实现很简单。 在计算实践中,百分比几乎没有模那么有用,所以我能想到的语言都没有实现。

用于 %

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

>>> percent("1500*20%")
300.0

简单的东西

>>> p = lambda x: x/100
>>> p(20)
0.2
>>> 100*p(20)
20.0
>>>

Brian 的答案(自定义函数)通常是正确且最简单的方法。

但是,如果你真的想定义一个数字类型有(非标)“%”经营者,像台计算器做,让“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)
    #...

如果您曾经在 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__")

使用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
def percent(part, whole):
    try:
        return 100 * float(part) / float(whole)
    except ZeroDivisionError:
        return 0

我发现对我来说最有用的情况是将计算计算为比率,然后使用 Python 格式化选项将结果格式化为百分比:

result = 1.0/2.0            # result is 0.5
print(f'{result:.0%}')      # prints "50%"

就用这个

score_in_percentage = round( score *100 , 2 )
print(f' {score_in_percentage}% ') #50%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM