Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 方法将任何输入数字乘以下一个整数_Python_Python 3.x_Math - Fatal编程技术网

Python 方法将任何输入数字乘以下一个整数

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():#检查这是否是一个整数 打印(新数量)#如果是打

我的目标是将任何有理数作为输入输入到函数中,并输出下一个整数,即输入数的倍数。是否有一种方法来确定任何此类数字的有理表达式?(即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
...     尽管如此:
...         新数量=轮(新数量+数量,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从未回答过数学问题,所以我给了他们最基本的答案,没有使用任何更复杂的数学概念。