【发布时间】:2014-04-08 11:58:45
【问题描述】:
在 python 上有什么方法可以有两个整数并将它们合并到一个浮点数中?
例如,我有两个变量 var1=2 和 var2=4,我想创建一个新变量 var3=2.4
【问题讨论】:
在 python 上有什么方法可以有两个整数并将它们合并到一个浮点数中?
例如,我有两个变量 var1=2 和 var2=4,我想创建一个新变量 var3=2.4
【问题讨论】:
你可以通过字符串来实现:
>>> var1=2
>>> var2=4
>>> var3=float(str(var1)+"."+str(var2))
>>> var3
2.3999999999999999
【讨论】:
try except ValueError 包围它,以防万一。
适用于任何 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 失败了。