我想使用数学库获取浮点数的前两个非零数字。 例如
x = 1.27
答案应该是
12
和
x = 0.025
答案将是
25
我可以找到第一个和第二个非零数字:
a = str(x)
o1 = int(a.replace('0', '')[1])
o2 = int(a.replace('0', '')[2])
然后我可以连接它们,但是我得到
字符串索引超出范围
数字错误。
答案 0 :(得分:2)
这是一种方法:
from itertools import islice
def first_n_nonzero_digits(l, n):
return ''.join(islice((i for i in str(l) if i not in {'0', '.'}), n))
first_n_nonzero_digits(1.27, 2)
# '12'
first_n_nonzero_digits(0.025, 2)
# '25'
这里是一个没有任何导入并使用sorted
的人:
def first_n_nonzero_digits_v2(l, n):
return ''.join(sorted(str(x), key=lambda x: x in {'0', '.'}))[:2]
first_n_nonzero_digits_v2(1.27, 2)
# '12'
first_n_nonzero_digits_v2(0.025, 2)
# '25'
答案 1 :(得分:0)
这是一个简单的解决方案:
str(x).replace(".","").replace("0", "")[:2]
答案 2 :(得分:0)
尝试一下:
def nonzeroDigits(f,n=2):
counter = 1
s = str(f).replace(".","")
for ndx,i in enumerate(s):
if i == "0":
counter = 1
continue
if counter >= n:
return s[ndx - n + 1: ndx + 1]
counter += 1
raise ValueError("Doesn't have non-zero consecutive Digits")
在不使用任何第三方库的情况下,使它变得尽可能简单很累。
print(nonzeroDigits(1.27))
# print(nonzeroDigits(1.02)) # Raise ValueError Exception
print(nonzeroDigits(0.025))
返回:
12
25