Python 方法将任何输入数字乘以下一个整数
我的目标是将任何有理数作为输入输入到函数中,并输出下一个整数,即输入数的倍数。是否有一种方法来确定任何此类数字的有理表达式?(即1.5作为输入输出3)您可以像这样缓慢而稳定地进行:Python 方法将任何输入数字乘以下一个整数,python,python-3.x,math,Python,Python 3.x,Math,我的目标是将任何有理数作为输入输入到函数中,并输出下一个整数,即输入数的倍数。是否有一种方法来确定任何此类数字的有理表达式?(即1.5作为输入输出3)您可以像这样缓慢而稳定地进行: def find_multiple(num): new_num=num 虽然是真的:#直到你遇到一个中断语句 new_num=舍入(new_num+num,3)#将原始数字添加到当前数字(下一个倍数),舍入,因为浮点很奇怪 如果new_num.is_integer():#检查这是否是一个整数 打印(新数量)#如果是打
def find_multiple(num):
new_num=num
虽然是真的:#直到你遇到一个中断语句
new_num=舍入(new_num+num,3)#将原始数字添加到当前数字(下一个倍数),舍入,因为浮点很奇怪
如果new_num.is_integer():#检查这是否是一个整数
打印(新数量)#如果是打印并打破循环
打破
例如:
>>def find_multiple(num):
... new_num=num
... 尽管如此:
... 新数量=轮(新数量+数量,3)
... 如果new_num.是_integer():
... 打印(新数量)
... 打破
...
>>>查找多个(1.5)
3
>>>查找多个(1.9)
19
>>>查找倍数(45.123)
45123
你可以试试这个。我不确定答案是否正确!!!。但如果它能很有效的解决方案,我相信
def nextMultiple(x):
'''
converting x to integer by multiplying by powers of 10
eg: 1.5 as 15.0 = 1.5 * 10
eg: 1.234 as 1234 = 1.234 * 1000
'''
m = len(str(x).split('.')[1])
y = x * 10**(m)
ans = y
'''
finding all prime factors of y and checking for condition to find the answer
'''
for i in range(2, int(y**0.5) + 1):
if y % i == 0:
c = round(i / x, m)
if c == int(c) and i > x:
ans = min(ans, i)
o = y / i
c = round(o / x, m)
if c == int(c) and o > x:
ans = min(ans, o)
return ans
1.5 -> 3
3.13 -> 313.0
1.75 -> 7
10.1 -> 101.0
如果你理解背后的数学原理,就没有必要使用暴力循环。您可以通过从给定数字的指数中导出它来计算使该数字成为整数所需的10的幂,然后通过将该数字除以二者中的最大公约数来计算该数字与上述10的幂之间的最小公倍数:
from math import gcd
from decimal import Decimal
def whole_multiple(n):
power = 10 ** -n.as_tuple().exponent
n *= power
return n // gcd(int(n), power)
以便:
whole_multiple(Decimal('-4.4'))
返回:
-22
请注意,您必须向函数传递一个
decimal.decimal
对象,它才能计算指数并避免浮点近似错误。要做什么,数学方程是什么?如何处理result=(int(inputvar)+1)*inputvar
?要解决此问题,您需要提供分数的命名符和分母(有理数)以排除固有的浮点错误。>>print(45.123,nextMultiple(45.123))(45.123,45123.0)>>>find_multiple(45.123)578201294.0
谢谢@arunp9294我没有检查小数点较高的浮点错误。我把它修好了。是的,它很慢,这是我最初承认的。OP从未回答过数学问题,所以我给了他们最基本的答案,没有使用任何更复杂的数学概念。