Mod是一个O(1)的操作,它几乎不会给你的实际程序增加任何开销,你也可以把它变成一个一行程序 x = a//b if not a % b else a/b 如果你经常需要做这样的事情,把它变成一个函数
def func(a, b):
return a//b if not a % b else a/b
func(10, 2) # out = 5
func(10, 3) # out = 3.333333333
func(1200, 100) # out = 12
func(1234, 1000) # out = 1.234
# // => used for integer output
# / => used for double output
x = 100/35 # => 2.857142857142857
y = 100//35 # => 2
z = 100.//35 # => 2.0 # floating-point result if divisor or dividend real
7条答案
按热度按时间u59ebvdq1#
感谢大家的帮助!答案来自@vaultah:
因此,只需使用常规除法,如4/2,然后格式化字符串。https://docs.python.org/2/library/string.html#format-specification-mini-language“从有效数中删除不重要的尾随零,如果小数点后面没有剩余数字,则也会删除小数点。”
e3bfsja22#
结果为“float”是“正确的”行为,而
.0
部分只是简单地指出了这一事实。我认为对你来说重要的是结果在字符串中的“表示”。所以你不应该改变实际结果,而只应该改变它的“显示”方式。使用格式化迷你语言:ljsrvy3e3#
您可以使用以下内容:
通常,您可以使用
'%2.1f' % number
等标准字符串格式选项或其他许多方法来格式化字符串。然而,您必须指定要显示的位数,但在本例中,要返回的尾随零的数量是可变的。'%g'
说明符没有此问题。但是使用了科学记数法我不知道这是否是操作员想要的。上面的解决方案将数字转换为“可良好打印的字符串表示形式”(
str(x)
),然后使用标准字符串方法删除尾随零(.rstrip('0')
),如果需要,删除剩余的尾随句点(.rstrip('.')
)(以避免“1.”)。注意:我添加了向float的强制转换,以确保代码对整数也能正确工作,以防有人需要。
oalqel3c4#
这对我来说很好用。大数字没有科学记数法格式。
yxyvkwin5#
Mod是一个O(1)的操作,它几乎不会给你的实际程序增加任何开销,你也可以把它变成一个一行程序
x = a//b if not a % b else a/b
如果你经常需要做这样的事情,把它变成一个函数
ylamdve66#
如果你能保证只得到一个尾随的零,那么强制转换为int就可以去掉它:
rfbsl7qr7#