[英]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.