在Python中如何索引浮点值?

42fyovps  于 2022-11-28  发布在  Python
关注(0)|答案(5)|浏览(217)

只是在寻找一个问题的答案,再多的谷歌搜索似乎也无法解决。
如果..

a = 1.23

我希望能够取1乘以这个数,但保留0.23
这怎么可能?
提前感谢!

yacmzcpb

yacmzcpb1#

在给蒙赫的答复中你的评语说:
我希望能够输入一个值作为小时,然后将其转换为分钟。所以如果是1. 20,我会将1乘以60,然后加上20。我相信一定有更简单的方法:)
因此你的程序会收到1.20作为一个 string

>>> 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',这将很容易科普。

dw1jzc5e

dw1jzc5e2#

你不能这样索引浮点数。它不是一个集合。关于浮点数如何工作的更多信息,请阅读http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
数学库为您提供了一种方法来获取包含数字的两个部分的元组

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

由于浮点数得表示方式,这并不精确,但该值得数量级为1 e-17.
当然,这也总是有可能的......

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

zbdgwd5y3#

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

In [39]: a = 1.23

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

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

gxwragnw4#

除了PM 2Ring's answer似乎可以解决你的实际问题之外,你可以“索引浮点数”,当然是在把它转换成字符串之后,但是要注意精确度的限制,所以使用内置的round函数来定义你的解决方案所需要的精确度:

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

现在,你可以对它应用所有你想要的字符串函数。之后,你可能需要把你的结果转换回floatint ...
[1]其他人已经提出了这样的建议:当在高级语言(如python)中处理常见模型(如time)时,期望得到reliable solutions that are already there的支持。

7tofc5zh

7tofc5zh5#

modf()和round()的组合

使用modf()可得到整数和小数部分。modf()将返回**(小数,整数)**的元组。使用round()可说明您希望得到的答案的精确程度。

>>> import math
>>> a = 1.23
>>> math.modf(a) (0.22999999999999998, 1.0)
>>> math.modf(a)[0] #the zeroth location of the tuple is the fractional part
0.22999999999999998 # some precision lost, use round() to fix
>>> round(math.modf(a)[0], 2)
0.23 # This is an exact match the source fractional part

此外,如果你想索引浮点数的每个特定部分,你可以使用:

def get_pos_float(num, unit, precision=3):
    if unit >= 10:
        num = abs(round(math.modf(num)[0], 3)) # Get just the fractional part
        num *= 10 # Move the decimal point one place to the right
        return get_pos_float(num, unit/10)
    retVal = int(math.modf(num)[1]) #Return the whole number part
    return retVal

其使用方法如下:

>>> get_pos_float(1.23, 10)
2
>>> get_pos_float(1.23, 100)
3

相关问题