在Python中找到浮点数的前两个非零数字?

2022-07-06 11:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用数学库得到浮点数的前两个非零数字。 例如

x = 1.27

答案是

12

以及

x = 0.025

答案是

25

我可以找到第一个和第二个非零数:

a = str(x)
o1 = int(a.replace('0', '')[1])
o2 = int(a.replace('0', '')[2])

然后我可以抓住他们但我

string index out of range

大数字错误。你知道吗


Tags: of答案stringindexrange数字数学outreplaceint浮点数o2stro1零数
3条回答
网友
1楼 ·

试试这个:

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
网友
2楼 ·

下面是一个简单的解决方案:

str(x).replace(".","").replace("0", "")[:2]
网友
3楼 ·

有一种方法:

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'