我正在编写Python3代码,这需要我简单地删除小数。我尝试了我能想到的最简单的
num = int(str(float(x)).replace('.', ''))
其中x
是使用x = a*x*(1-x)
生成的,其中a
和x
都是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.55
和a
是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'
如果您想更精确地使用十进制,
您应该使用十进制模块。