2014-09-18 84 views
1

只是寻找一个问题的答案似乎没有任何数量的谷歌搜索结果。如何在Python中为浮点值建立索引?

如果..

a = 1.23 

我希望能够把1和这个数字乘以还保持0.23

这怎么可能?

提前致谢!

+1

你为什么称这个操作为“索引”?这听起来像是在选择和操作数字的字符串表示的部分方面。如果是这样,你会想要停止考虑文本方面的数字,并开始考虑数字操作。在这里,它看起来像是要向下舍入或向下舍入为零。 – user2357112 2014-09-18 17:49:46

+0

[在python中将数字拆分为整数和小数部分](http://stackoverflow.com/questions/6681743/splitting-a-number-into-the-integer-and-decimal-parts-in- python) – munk 2014-09-18 17:53:23

+0

你实际的问题很[很难察觉](http://stackoverflow.com/questions/25919129/how-do-you-index-a-float-value-in-python/25958114#comment40573206_25919190)。 – Wolf 2014-09-21 10:16:03

回答

0

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

数学库为您提供了一种方式来获得与数字的两个部分的元组虽然

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

这是不是因为这样的exacct表示浮点数,但值大约为1e-17。

当然,这始终是可能的太...

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

这看起来像我在找什么。准确地解释我在做什么。我希望能够以小时输入一个值,然后将它们转换为分钟。所以,如果它是1.20,我会乘以60乘以60,然后加20。我确定必须有一个更简单的方法:)格式化抱歉,这只是我的第二个问题,并且试图去掌握网站。 – 2014-09-18 18:00:16

+4

如果您正在处理时间问题,那么您肯定应该使用时间模块,而不是试图将浮点强制转换为奇怪的时间表示。 – munk 2014-09-18 18:20:48

+1

如果你正在寻找时间算术,你应该使用为此设计的timedelta对象。 '将datetimetime导入为dt; dt.timedelta(hours = 1,minutes = 20).seconds // 60' – b10n 2014-09-18 18:21:47

0

int()你在找什么:

In [39]: a = 1.23 

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

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

'>>> a-int(a) 0.22999999999999998',它确实舍入到了0.23 – g4ur4v 2014-09-18 17:47:01

+0

我想他想要的东西更像(somefloat.integerpart * N + somefloat.fractionalpart)。防爆。当你伪造乘以6时,1.23变成6.23。 – Kevin 2014-09-18 17:48:19

2

在评论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',这将很容易应对。

+1

这很难,检测注释中的实际问题;)(+1) – Wolf 2014-09-21 10:12:50

0

除了PM 2Ring's answer似乎解决[1]您的实际问题,将其转换为字符串后,可能会“指数花车”,当然,但要注意精度的限制。因此,使用内置的round功能来定义您的解决方案所需的精度:

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

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


[1]其他人已经建议这样的:与普通机型在高层次的语言处理像时间蟒蛇时,期望通过reliable solutions that are already there支持。

相关问题