从任意十进制数中删除小数点

2024-05-15 21:19:36 发布

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

我正在编写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

我检查了以下线程,但它对我没有帮助(Convert scientific notation to decimals)。为什么会这样

编辑:老实说,我不能确切地写出我正在编写的代码,因为我不允许透露。但我还是会尽可能地说清楚:

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


Tags: 代码for数字科学float事情numreplace
1条回答
网友
1楼 · 发布于 2024-05-15 21:19:36

浮点不能精确表示小数。
例如,下面的代码不起作用,因为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'

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

相关问题 更多 >