那么如果我运行:
a = b / c
并获得结果 1.2234
我该如何分离它,以便我有:
a = 1
b = 0.2234
那么如果我运行:
a = b / c
并获得结果 1.2234
我该如何分离它,以便我有:
a = 1
b = 0.2234
>>> from math import modf
>>> b,a = modf(1.2234)
>>> print ('a = %f and b = %f'%(a,b))
a = 1.000000 and b = 0.223400
>>> b,a = modf(-1.2234)
>>> print ('a = %f and b = %f'%(a,b))
a = -1.000000 and b = -0.223400
a,b = divmod(a, 1)
尝试:
a, b = int(a), a - int(a)
奖励:负数也适用。 -1.7
被拆分为-1
和-0.7
而不是-2
和0.3
。
编辑 如果保证a
为非负数,则gnibbler的解决方案是正确的。
编辑2 在我看来,Odomontois的解决方案比我的和gnibbler的都好。
b = a % 1
a = int(a)
或者其他什么
a = -1.7
,结果是 -2
和 0.3
,这可能不是作者想要的。 - Bolodef fractional_part(numerator, denominator):
if denominator != 0:
return math.modf(numerator/denominator)
return 0
2.没有内置函数:
def fractional_part(numerator, denominator):
if denominator != 0:
a = str(numerator/denominator).split(".")[0]
b = "0." + str(numerator/denominator).split(".")[1]
return (float(a),float(b))
return 0
x = 1.2234
y = str(x/100).split('.')
a = y[0]
b = y[1]
那么结果就是...
a = 1
b = 2234
你也可以使用numpy函数np.modf:
fractional_part, int_part = np.modf([0,1.2234,3.5])
当然,如果您能够处理向量而不是逐个处理单个数字,那么这将非常高效。
int(a)/b == 1
(a/b)%1 == 0.2234
这是最简单的方法,但它有一个缺陷,就是执行后得到的数字将不会被减少,而是以完整形式呈现
x = 1.2234
#x = a/b
a, b = x.as_integer_ratio()
print(a)
print(b)
就像这种情况下,a和b分别是5509703784125065和4503599627370496。
a = -1.7
,结果是-2
和0.3
,这可能不是作者想要的。 - Bolo1.0
会稍微更有效率,否则divmod()
将不得不在每个调用中执行整数到浮点数的转换。 - Brandon Rhodes