【问题标题】:How do you index a float value in Python?如何在 Python 中索引浮点值?
【发布时间】:2014-09-18 17:43:28
【问题描述】:

只是寻找一个问题的答案,似乎没有多少谷歌搜索可以解决。

如果..

a = 1.23

我希望能够取 1 并乘以这个数字但保留 .23

这怎么可能??

提前致谢!

【问题讨论】:

  • 为什么称这个操作为“索引”?听起来您正在考虑选择和操作数字的部分字符串表示形式。如果是这样,您将希望停止从文本的角度考虑数字并开始考虑数字运算。在这里,您似乎想要向下舍入或向零舍入。
  • 你的实际问题很hard to detect

标签: python indexing


【解决方案1】:

在对 munkhd 的回答中,您说:

我希望能够以小时的形式输入一个值,然后将它们转换为分钟。 因此,如果它是 1.20,我会将 1 乘以 60,然后再加上 20。 我相信一定有一个更简单的方法:)

因此,您的程序将收到 1.20 作为字符串。所以你可以在上面使用字符串方法,例如

>>> dotted_time = '1.20'
>>> h, m = [int(s) for s in dotted_time.split('.')]
>>> print h, m
1 20
>>> minutes = 60*h + m
>>> hours = minutes / 60.0
>>> print minutes, hours
80 1.33333333333

或者,您可以使用colon_time = dotted_time.replace('.', ':')colon_time 采用标准时间函数可以为您理解和操作的格式。这可能是更明智的方法,如果您想处理像 '1.20.30' 这样的秒数,.replace('.', ':') 将转换为 '1:20:30',它可以轻松应对。

【讨论】:

  • 辛苦了,发现cmets中的实际问题;) (+1)
【解决方案2】:

您不能像这样索引浮点数。这不是一个集合。有关浮点数如何工作的更多信息,请阅读http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

数学库为您提供了一种方法来获取包含数字的两个部分的元组

>>> import math
>>> a = 1.23
>>> math.modf(a)
(0.22999999999999998, 1.0)

由于浮点数的表示方式,这并不准确,但该值在 1e-17 的数量级上。

当然,这也总是可能的......

>>> map(int, str(a).split('.'))
[1, 23]

【讨论】:

  • 这看起来就是我要找的东西。准确地解释我在做什么。我希望能够以小时为单位输入一个值,然后将它们转换为分钟。因此,如果它是 1.20,我会将 1 乘以 60,然后加 20。我相信一定有一个更简单的方法 :) 对格式感到抱歉,这只是我的第二个问题,我正在努力掌握该网站。跨度>
  • 如果您使用时间,您应该绝对使用时间模块,而不是试图将浮点数强制转换为奇怪的时间表示。
  • 如果你想要计算时间,你应该使用为此设计的 timedelta 对象。 '导入日期时间为 dt; dt.timedelta(hours=1, minutes=20).seconds // 60`
【解决方案3】:

int() 是您要查找的内容:

In [39]: a = 1.23

In [40]: int(a)
Out[40]: 1

In [41]: a
Out[41]: 1.23

【讨论】:

  • >>> a-int(a) 0.22999999999999998 ,它确实四舍五入到 0.23
  • 我认为他想要的东西更像 (somefloat.integerpart * N + somefloat.fractionalpart)。前任。当你假乘以 6 时,1.23 变为 6.23。
【解决方案4】:

除了PM 2Ring's answer 似乎解决了您的实际问题[1],您当然可以“索引浮点数”,当然在将其转换为字符串之后,但请注意准确性有限。所以使用内置的round 函数来定义您的解决方案所需的精度:

s = str(round(a, 2)) # round a to two digits

现在,您可以对它应用所有想要的字符串函数。之后,您可能需要将结果转换回 floatint ...


[1] 其他人已经提出了这样的建议:在使用像 python 这样的高级语言处理像 time 这样的常见模型时,期望得到reliable solutions that are already there的支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2022-11-17
    • 2021-04-08
    • 2020-12-26
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多