【问题标题】:How to iterate a float in Python 3?如何在 Python 3 中迭代浮点数?
【发布时间】:2018-03-05 10:08:46
【问题描述】:

所以现在我有一个变量 x = 1001.0010101

从这个 x,我想分成两部分:

x = 1001.0010101
val_int = int(x)                         #get val_int   = 1001
val_fract = {0:.5f}".format(a - val_int) #get val_fract = 0.00101

是否可以使用for循环将val_fract迭代为:(忽略int部分和小数点)

0 
0 
1 
0 
1

我试了很多次都做不到,系统告诉我

Traceback (most recent call last):
  File "python", line 46, in <module>
TypeError: 'float' object is not iterable

感谢您的帮助,非常感谢。

【问题讨论】:

  • 您可能希望将变量转换为字符串对象,然后使用正则表达式得到您想要的。
  • 我只是尝试使用拆分方法将两个部分分开。但是小数部分没有完全拆分,我的意思是第二部分只取10101和**00**(这两个零)10101丢失了。
  • 你的分割方法的代码是什么,你能把它附加到你的问题中吗?
  • 你能详细解释一下这是干什么用的吗?这是一件奇怪的事情,我怀疑有更好的方法来解决潜在的问题。请注意,值 1001.0010101 无法在 Python float 中表示。你能得到的最好的结果是1001.001010100000030433875508606433868408203125。你想在小数部分看到所有这些数字吗?如果不是,你截断它们的标准是什么?
  • 那么您绝对不应该将1001.0010101 存储在Python float 中。您应该将其表示为字符串,而不是数字。

标签: python python-3.x for-loop floating-point


【解决方案1】:

您可以在python中使用math模块来分隔小数和整数部分

import math 
x = 1001.0010101
math.modf(x)
#output:(0.0010101000000304339, 1001.0)

随心所欲地迭代

对小数点后的多余数字有疑问,请阅读docs

【讨论】:

  • 这个答案没有实现我的愿望!哈哈,没关系,我有新东西了!谢谢!
【解决方案2】:
x = 1001.0010101
x = "{0:.5f}".format(x)
for i in str(x).split(".")[1]:
    print(i)

输出

0
0
1
0
1

【讨论】:

  • 不客气。如果它解决了您的问题,请接受。谢谢
【解决方案3】:

我不知道,为什么您在评论中建议缺少前导零:

x = 1001.0010101
#separate fractional from integer part
frac = str(x).split(".")

for digit in frac[1]:
    print(digit)

或者,您可以将两个部分都转换为整数列表:

#integer digits
x_int = list(map(int, frac[0]))
#fractional digits
x_frac = list(map(int, frac[1]))

【讨论】:

  • 谢谢你!工作正常!因为我只是喜欢用num = 123.456 split_num = str(num).split('.') int_part = int(split_num[0]) decimal_part = int(split_num[1])转换小数部分请参考stackoverflow.com/questions/6681743/…用这种方法只是有它的缺点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2020-09-02
相关资源
最近更新 更多