我最近了解到,“%”符号用于计算Python中整数的余数。但是,我无法确定是否有另一个运算符或方法来计算Python中的百分比。
与“/”一样,它会给你商,如果你只使用一个整数的浮点数,它实际上会给你像传统除法的答案。那么有一种方法可以计算出百分比吗?
答案 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