>>> 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
5条答案
按热度按时间yacmzcpb1#
在给蒙赫的答复中你的评语说:
我希望能够输入一个值作为小时,然后将其转换为分钟。所以如果是1. 20,我会将1乘以60,然后加上20。我相信一定有更简单的方法:)
因此你的程序会收到1.20作为一个 string。
或者,您可以执行
colon_time = dotted_time.replace('.', ':')
;colon_time
的格式是标准时间函数可以理解和操作的。这可能是更明智的处理方式,如果你想处理像'1.20.30'这样的秒时间,.replace('.', ':')
将转换为'1:20:30',这将很容易科普。dw1jzc5e2#
你不能这样索引浮点数。它不是一个集合。关于浮点数如何工作的更多信息,请阅读http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
数学库为您提供了一种方法来获取包含数字的两个部分的元组
由于浮点数得表示方式,这并不精确,但该值得数量级为1 e-17.
当然,这也总是有可能的......
zbdgwd5y3#
int()
是您要查找的内容吗:gxwragnw4#
除了PM 2Ring's answer似乎可以解决你的实际问题之外,你可以“索引浮点数”,当然是在把它转换成字符串之后,但是要注意精确度的限制,所以使用内置的
round
函数来定义你的解决方案所需要的精确度:现在,你可以对它应用所有你想要的字符串函数。之后,你可能需要把你的结果转换回
float
或int
...[1]其他人已经提出了这样的建议:当在高级语言(如python)中处理常见模型(如time)时,期望得到reliable solutions that are already there的支持。
7tofc5zh5#
modf()和round()的组合
使用
modf()
可得到整数和小数部分。modf()
将返回**(小数,整数)**的元组。使用round()
可说明您希望得到的答案的精确程度。此外,如果你想索引浮点数的每个特定部分,你可以使用:
其使用方法如下: