我有一个非常大的数字,无论是小数点前还是小数点后,但对于这个,我就称它为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}$
如果我正确地理解了您的问题,您希望找到可以乘以非整数(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.0
,y = 1/x
将产生{z
,只需使用y = z/x
。在我不是Python程序员,但是round函数呢?在
相关问题 更多 >
编程相关推荐