【问题标题】:merge two integer variables in a single float in python在python中将两个整数变量合并为一个浮点数
【发布时间】:2014-04-08 11:58:45
【问题描述】:

在 python 上有什么方法可以有两个整数并将它们合并到一个浮点数中?

例如,我有两个变量 var1=2 和 var2=4,我想创建一个新变量 var3=2.4

【问题讨论】:

    标签: python merge integer


    【解决方案1】:

    你可以通过字符串来实现:

    >>> var1=2
    >>> var2=4
    >>> var3=float(str(var1)+"."+str(var2))
    >>> var3
    2.3999999999999999
    

    【讨论】:

    • +1。如果您在脚本中使用它,最好用try except ValueError 包围它,以防万一。
    • @TejasPendse,应该引发什么样的异常?我不明白会出什么问题。
    【解决方案2】:

    适用于任何 a 和 b 的有效方法:

    from math import floor, log10
    
    def combine(a, b):
        if b == 0:
            return a
        return a + b * 10**-(floor(log10(b))+1)
    

    此方法和 fredtantini 版本的测试时间:

    from timeit import Timer
    from random import randint
    from math import floor, log10
    
    def random_pair_generator(n):
        i = 0
        while i < n:
            yield (randint(1, 1000000000), randint(1, 1000000000))
            i += 1
    
    def maths_combine(a, b):
        if b == 0:
            return float(a)
        return a + b * 10**-(floor(log10(b))+1)
    
    def string_combine(a, b):
        return float(str(a) + '.' + str(b))
    
    def time(n):
        maths_time, string_time = 0, 0
        for a, b in random_pair_generator(n):
            maths_time += Timer(lambda: maths_combine(a, b)).timeit()
            string_time += Timer(lambda: string_combine(a, b)).timeit()
        print('Maths time:', maths_time)
        print('String time:', string_time)
    
    
    >>> time(20)
    Maths time: 31.402130099450005
    String time: 49.468994391525484
    

    正如预期的那样,使用数学要快得多。

    【讨论】:

    • 很好,但 b = 0 失败了。
    猜你喜欢
    • 2014-04-13
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-04-15
    • 2016-06-01
    • 2010-11-24
    相关资源
    最近更新 更多