簡體   English   中英

更快地在Python中移動小數以刪除零?

[英]Faster way to shift a decimal in Python to remove zeros?

我有各種各樣的數字,總是以0和1為界。這些數字的范圍是值,例如

.9, .08, .00024, .00000507

我的目標是將這些數字轉換為以下數字

.9, .8, .24, .507

也就是說,我想刪除小數點后的任何零。

我有以下代碼來執行此操作。 有沒有辦法在性能方面更快地做到這一點?

import math
x=.009
n = int(-math.log10(x))
x *= math.pow(10, n)

更快的方法(使用更大的數字變得更快):

def method2(x):
    while x < 0.1:
        x *= 10
    return x

甚至更快:

def method3(x):
    while x < 0.01:
        x *= 100
    while x < 0.1:
        x *= 10
    return x

這樣做的有趣方法(慢於問題):

def remove_zeros(a):
    return float("0." + str(long(str(1+a)[2:])))

這不完全是您的預期輸出,但您可以使用它。

如果將數字存儲為小數,則可以將它們格式化為科學計數法並丟棄除基數之外的所有內容。

>>> from decimal import Decimal
>>> numbers = ['.9', '.08', '.00024', '.00000507']
>>> decimals = [Decimal(n) for n in numbers]
>>> [format(d, '.2E')[:4] for d in decimals]
['9.00', '8.00', '2.40', '5.07']

我在這里將它們顯示為字符串格式,因為它更精確地以這種方式實例化Decimal,因為它避開了浮點問題。 如果您從數字作為浮動列表開始,則在第三步中獲得:

[Decimal('0.90000000000000002220446049250313080847263336181640625'), Decimal('0.08000000000000000166533453693773481063544750213623046875'), Decimal('0.00024000000000000000608020578329870886591379530727863311767578125'), Decimal('0.0000050699999999999997388091914352070688210005755536258220672607421875')]

在這種情況下,它會給你相同的答案,但可能並不總是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM