Python 3浮点(X)*i=int(Z)

2024-10-02 12:32:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的数字,无论是小数点前还是小数点后,但对于这个,我就称它为4.58。在

我想知道一个数字,Y,如果乘以X,它会得到一个整数,而不是任何浮点数。在

这是我的代码:

from decimal import *
setcontext(ExtendedContext)
getcontext().prec = 300
x=Decimal('4.58')
while True:
    i=1
    a=Decimal(i*x)
    if float(a).is_integer():
        print(i*x)
        break
    else:
        i=+1

然而,这种方法速度非常慢而且效率低下。我想知道如何实现连分式或其他方法来预测Y的值?在

编辑

十进制模块更精确地存储浮点数(以字符串形式),因此0.5不会变成0.49999999。在

编辑2

我有X(4.58)。在

我想知道什么数乘以X得到一个整数;尽可能有效。在

编辑3

好吧,也许还不是我最好的问题。在

这是我的困境。在

我从我做的一个琐碎的节目中得到了一个数字。这个数字是一个十进制数,1.5。在

我要做的就是找出哪个整数乘以我的十进制数得到另一个整数。在

对于1.5,最好的答案是2。(1.5*2=3)(浮点*整数=整数)

我上面的while循环最终会做到这一点,但我只想知道是否有更好的方法来实现这一点,比如连分式;如果有,我如何实现它呢。在

编辑4

这是感谢用户6794072的代码。它很长,但功能强大。在

^{pr2}$

Tags: 方法代码fromimport编辑数字整数decimal
3条回答

如果我正确地理解了您的问题,您希望找到可以乘以非整数(n)的最小整数(I),以便:

i*n是一个整数

我会通过找出n的分子和分母的因子来实现这一点。在你的例子中,如果n=4.58,那么你可以提取458作为分子,100作为分母。在

458的倍数是2和229 100的倍数是2,2,5,5

您可以为分子和分母划掉一个2的实例。然后你的解决方案就是乘以分母中的剩余因子:在本例中,是2*5*5或50。在

想想看,如果你想达到z = 1,然后用{}这个事实来衡量答案。对于任何浮点数x != 0.0y = 1/x将产生{},因此对于任意整数z,只需使用y = z/x。在

我不是Python程序员,但是round函数呢?在

相关问题 更多 >

    热门问题