从任意小数中删除小数点



我正在编写Python3代码,这需要我简单地删除小数。我尝试了我能想到的最简单的

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

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

但当十进制数字用科学记数法表示时,会出现以下错误:

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'

如果您想更精确地使用十进制,
您应该使用十进制模块。

最新更新