在Python中将浮点数与一个非常大的整数相乘

时间:2017-06-09 16:18:13

标签: python floating-point largenumber

在Python中,有没有办法将float与一个非常大的整数相乘?

举个例子,我试过print (10**100000) * 1.414 它给了我:

OverflowError: long int too large to convert to float

请注意,值(浮点数和大数字)可以是任何值。更重要的是,我想要表达式的精确值(四舍五入到最接近的整数)。

请提供任何解决方案。

4 个答案:

答案 0 :(得分:2)

编辑2:

好的,我知道你在追求什么:

import mpmath

mpmath.mp.dps = 100005
i = int(mpmath.mpf("1.414") * 10 ** 100000)

print(str(i)[:10])        # 1414000000
print(len(str(i)))        # 100001
print(str(i)[-10:])       # 0000000000
print(str(i).count("0"))  # 99997

对于@Stefan:

int(mpmath.mpf("1.414") * (10 ** 100000 + 1000))

返回

14140000000000000 ... 000000000001414     # string contains 99993 0s

答案 1 :(得分:2)

将浮点数转换为整数比率:

value = 1.414
large = 10**100000

a, b = value.as_integer_ratio()
number, residual = divmod(large * a, b)
number += residual*2 >= b   

答案 2 :(得分:2)

如果您正在寻找完全值,这意味着您必须有1.414作为字符串访问权限(否则,存储在内存中的值不是&t;确切地说。)

import decimal

float_string = '1.614' # to show that rounding works
exponent = 100000
decimal.getcontext().prec = exponent + 1

c = 10 ** exponent + 1
d = decimal.Decimal(float_string) * c

print d #1614000.....000002

答案 3 :(得分:0)

由于您接受整数近似,因此这是一个原生解决方案:

def getint(x, y, z):
    z_nu, z_de = z.as_integer_ratio()
    return ((x**y) * z_nu) // z_de

用法:

>>> getint(2, 3, 5.)
40

>>> getint(10, 100000, 1.414)
1413999999999999923616655905789230018854141235351562500000000...  # truncated