【问题标题】:Check if num can be divided by 1 (not 1.9, 2.5 but 1.0, 6.0)检查 num 是否可以除以 1(不是 1.9、2.5 而是 1.0、6.0)
【发布时间】:2015-09-07 16:04:44
【问题描述】:

我需要编写一个生成器来获取一个范围,并且每次调用都会产生下一个浮点步骤。

Python 代码:

def float_range(x, y, step):
    while x <= y:
        x = float(x)
        if x % 1 == 0: # Here is the problem
            yield int(x)
        else:
            yield x
        x += step

当一个数字可以除以一时,我应该把这个数字作为一个整数,但if 语句永远不会是真的。 我已经尝试过float.is_integer()

【问题讨论】:

  • “我已经尝试过 float.is_integer()” - 怎么样,结果如何?
  • 不,它没有。我想知道为什么 x % 1 == 0 没有得到 True。
  • jonrsharpe - 相同 - 表达式不正确
  • @Etgar:float.is_integer()x % 1 == 0 都将是错误的,原因完全相同:您实际上没有整数。你有一个整数加或减一小部分
  • @vaultah:呃,那你不妨选择任何浮动不精确的帖子,至少给这个 OP 一个更有帮助的答案。

标签: python range generator


【解决方案1】:
def float_range(x, y, step):
    while x <= y:
        if round(x, 3) % 1 == 0:
            yield int(round(x))
        else:
            yield x
        x += step

在 x 上加上很多倍 0.1 时,会有一个小的偏差。 舍入 x 解决了我的小数问题。

【讨论】:

  • 我认为真正的问题是“有多接近才足够接近?”。出于您的目的,1.99、1.999、1.9999 是否足够接近 2,您希望它产生 2?另一方面,还有 1.01、1.001、1.0001 等需要考虑。一旦你知道了,那么我认为@Etgar 有一个很好的答案。只需将他的解决方案中的“3”更改为您需要的任何精度级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2010-12-29
  • 2011-07-20
  • 2018-07-28
  • 2017-02-16
相关资源
最近更新 更多