簡體   English   中英

從任意十進制數中刪除小數點

[英]Remove decimal point from any arbitrary decimal number

我正在編寫 Python3 代碼,這需要我簡單地刪除小數點。 我嘗試了我能想到的最簡單的事情

num = int(str(float(x)).replace('.', ''))

其中x是使用x = a*x*(1-x)生成的,其中ax都是浮點數

但是當十進制數以科學計數法表示時,它會引發以下錯誤:

    num = int(str(float(x)).replace('.', ''))
ValueError: invalid literal for int() with base 10: '4234481147613274e-05'

盡管它在沒有以科學計數法表示時有效。 讓我感興趣的是,當我在命令行中使用相同的數字時,它給了我正確的結果

>>> x = 4234481147613274e-05
>>> x
42344811476.13274
>>> num = int(str(float(x)).replace('.', ''))
>>> num
4234481147613274

我檢查了以下線程,但它對我沒有幫助( 將科學記數法轉換為小數)。 為什么會這樣?

編輯:老實說,我不能准確地寫出我正在編碼的內容,因為我不允許透露它。 但我還是會盡量說清楚:

x = 0.55a是 3.85681 和 4 之間的數字,然后我循環x的值,最后是轉換:

a = 3.85681 + ((big_integer)%14319)*1e-5
for i in range(500): x = a*x*(1-x)
num = int(str(float(x)).replace('.', ''))

我想要的是如果x = 0.470912345 ,我想要num = 470912345 所以我認為這個問題可以理解為什么我不使用x*10000或類似的東西,因為我不希望 0.452 變成 4520,而只是 452。

float 不能精確地表示十進制。
例如,下面的代碼不起作用,因為 x 是「4.234481147613274e-05」
(在我的環境中)

>>> x = 4234481147613274e-20
>>> x
4.234481147613274e-05
>>> num = int(str(float(x)).replace('.', ''))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '423448114761e-05'

# cast to string
>>> str(float(x))
'4.23448114761e-05'

如果您想更精確地使用小數,
你應該使用十進制模塊。

暫無
暫無

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

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