当我在Python 3中执行简单除法时,例如123000/1000,我得到123.0,或4/2我得到2.0。如何摆脱Python 3的尾随零?
编辑: 我不想只是简单的整数除法。例如,1234/1000应为1.234。
答案 0 :(得分:2)
结果是“浮空”是“正确的”行为,.0
部分只是表明了这一事实。我认为对您来说重要的是字符串中结果的“表示”。因此,您不应更改实际结果,而只能更改其“显示”方式。使用formatting mini language:
>>> for val in (123000/1000, 4/2, 1234/1000): print(f"{val:g}") # Use "General format" to represent floats
...
123
2
1.234
答案 1 :(得分:1)
感谢您的帮助!答案来自@vaultah:
>>> f'{2.1:g}'
'2.1'
>>> f'{2.0:g}'
'2'
因此,只需使用常规除法(例如4/2),然后格式化字符串即可。 从文档“ g”开始:https://docs.python.org/2/library/string.html#format-specification-mini-language “从有效位数中删除不重要的尾随零,并且如果在其后没有剩余数字,则也删除小数点。”
答案 2 :(得分:1)
您可以使用类似这样的内容:
def remove_trailing_zeros(x):
return str(x).rstrip('0').rstrip('.')
remove_trailing_zeros(1.23) # '1.23'
remove_trailing_zeros(4.0) # '4
通常,您将使用标准的字符串格式设置选项,例如'%2.1f' % number
或其他许多格式化字符串的方法。但是,您随后必须指定要显示的位数,但是在这种情况下,要返回的尾随零的数量是可变的。 '%g'
格式说明符不存在此问题,但使用科学计数法,我不知道这是否是OP想要的。
上述解决方案将数字转换为“可打印的字符串表示形式”(str(x)
),然后删除尾随零(.rstrip('0')
),并在必要时删除剩余的尾随时间段(.rstrip('.')
)(以避免出现“ 1。”)。
答案 3 :(得分:0)
如果您可以保证只得到尾随的零,则强制转换为int即可:
>>> 4/2
2.0
>>> int(4/2)
2
答案 4 :(得分:0)
# // => 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
答案 5 :(得分:0)
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
答案 6 :(得分:0)
这对我很有效。大数没有科学记数法格式。
def no_trailing_zero(value: float) -> Union[float, int]:
return int(value) if value % 1 == 0 else float(str(value))
>>> no_trailing_zero(50)
50
>>> no_trailing_zero(50.11)
50.11
>>> no_trailing_zero(50.1100)
50.11
>>> no_trailing_zero(50.0)
50
>>> no_trailing_zero(500000000.010)
500000000.01
>>>