Rai*_*ers 24 python string zero
我需要找到一种方法来转换python中的以下字符串:
0.000 => 0
0 => 0
123.45000 => 123.45
0000 => 0
123.4506780 => 123.450678
Run Code Online (Sandbox Code Playgroud)
等等.我尝试了.rstrip('0').rstrip('.'),但如果输入为0或00则不起作用.
有任何想法吗?谢谢!
sam*_*ias 21
更新了 Generalized以保持精度并处理看不见的值:
import decimal
import random
def format_number(num):
try:
dec = decimal.Decimal(num)
except:
return 'bad'
tup = dec.as_tuple()
delta = len(tup.digits) + tup.exponent
digits = ''.join(str(d) for d in tup.digits)
if delta <= 0:
zeros = abs(tup.exponent) - len(tup.digits)
val = '0.' + ('0'*zeros) + digits
else:
val = digits[:delta] + ('0'*tup.exponent) + '.' + digits[delta:]
val = val.rstrip('0')
if val[-1] == '.':
val = val[:-1]
if tup.sign:
return '-' + val
return val
# test data
NUMS = '''
0.0000 0
0 0
123.45000 123.45
0000 0
123.4506780 123.450678
0.1 0.1
0.001 0.001
0.005000 0.005
.1234 0.1234
1.23e1 12.3
-123.456 -123.456
4.98e10 49800000000
4.9815135 4.9815135
4e30 4000000000000000000000000000000
-0.0000000000004 -0.0000000000004
-.4e-12 -0.0000000000004
-0.11112 -0.11112
1.3.4.5 bad
-1.2.3 bad
'''
for num, exp in [s.split() for s in NUMS.split('\n') if s]:
res = format_number(num)
print res
assert exp == res
Run Code Online (Sandbox Code Playgroud)
输出:
0
0
123.45
0
123.450678
0.1
0.001
0.005
0.1234
12.3
-123.456
49800000000
4.9815135
4000000000000000000000000000000
-0.0000000000004
-0.0000000000004
-0.11112
bad
bad
Run Code Online (Sandbox Code Playgroud)
aru*_*l84 11
您可以根据需要使用格式字符串,但请注意,您可能需要设置所需的精度,因为默认情况下格式字符串有自己的逻辑.Janneb在另一个答案中建议精确度为17 .
'{:g}'.format(float(your_string_goes_here))
Run Code Online (Sandbox Code Playgroud)
然而,在考虑了这个之后,我认为最简单和最好的解决方案就是将字符串转换两次(如jathanism所示):
str(float(your_string_goes_here))
Run Code Online (Sandbox Code Playgroud)
编辑:因评论而添加了说明.
对于浮点数,您只需将字符串转换为float
:
>>> float('123.4506780')
123.450678
Run Code Online (Sandbox Code Playgroud)
对于零值,您可以将它们转换为整数:
>>> int('0000')
0
Run Code Online (Sandbox Code Playgroud)
打印时,数值会自动转换为字符串.如果你需要这些实际上是字符串,你可以简单地将它们转换回字符串str()
,例如:
>>> str(float('123.4506780'))
'123.450678'
Run Code Online (Sandbox Code Playgroud)