在Python中,如何通过小数点拆分数字

21

那么如果我运行:

a = b / c

并获得结果 1.2234

我该如何分离它,以便我有:

a = 1
b = 0.2234
9个回答

22
>>> 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

11
a,b = divmod(a, 1)

2
对于 a = -1.7,结果是 -20.3,这可能不是作者想要的。 - Bolo
我不希望涉及负数。 - Incognito
1
请注意,使用常量1.0会稍微更有效率,否则divmod()将不得不在每个调用中执行整数到浮点数的转换。 - Brandon Rhodes

9

尝试:

a, b = int(a), a - int(a)

奖励:负数也适用。 -1.7被拆分为-1-0.7而不是-20.3

编辑 如果保证a为非负数,则gnibbler的解决方案是正确的。

编辑2 在我看来,Odomontois的解决方案比我的和gnibbler的都好。


1
b = a % 1
a = int(a)

或者其他什么


2
对于 a = -1.7,结果是 -20.3,这可能不是作者想要的。 - Bolo

1
您可以用不同的方式来完成: 1.使用内置函数:
def 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

0
x = 1.2234

y = str(x/100).split('.')

a = y[0]
b = y[1]

那么结果就是...

a = 1
b = 2234

1
b = 2234 不是 OP 希望的。他想要 b = 0.2234。 - zelite

0

你也可以使用numpy函数np.modf

fractional_part, int_part = np.modf([0,1.2234,3.5])

当然,如果您能够处理向量而不是逐个处理单个数字,那么这将非常高效。


0
int(a)/b == 1
(a/b)%1 == 0.2234

0

这是最简单的方法,但它有一个缺陷,就是执行后得到的数字将不会被减少,而是以完整形式呈现

x = 1.2234 
#x = a/b

a, b = x.as_integer_ratio()
print(a)
print(b)

就像这种情况下,a和b分别是5509703784125065和4503599627370496。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接