Python 在十进制前后交换数字
我正在编写一个函数,它接受一个正数,交换小数点前后的数字,并将其作为字符串返回。如果输入是整数,则返回的字符串以“0”开头。即37->0.37Python 在十进制前后交换数字,python,python-3.x,math,floating-point,Python,Python 3.x,Math,Floating Point,我正在编写一个函数,它接受一个正数,交换小数点前后的数字,并将其作为字符串返回。如果输入是整数,则返回的字符串以“0”开头。即37->0.37 def浮点交换(x): a=x-int(x) b=int(x) 返回str(b+a) 打印(浮动交换(2.5)) # 2.5 我哪里出错了?请观察我在代码中的注释,以便更好地了解发生了什么: def float_swap(x): # 2.5 a = x - int(x) # a = 2.5 - 2 = 0.5 b = int(x)
def浮点交换(x):
a=x-int(x)
b=int(x)
返回str(b+a)
打印(浮动交换(2.5))
# 2.5
我哪里出错了?请观察我在代码中的注释,以便更好地了解发生了什么:
def float_swap(x): # 2.5
a = x - int(x) # a = 2.5 - 2 = 0.5
b = int(x) # b = 2
return str(b+a)# str(2 + 0.5)
print(float_swap(2.5))
# 2.5
正确的方法是
def float_swap(x): # 2.5
return '.'.join(str(float(x)).split('.')[::-1])
print(float_swap(2.5))
print(float_swap(37))
输出:
5.2
0.37
5.2
0.37
错误的原因在前面的回答中给出。 如果您对解决方案感兴趣,可以执行以下操作:
def float_swap(x):
s=str(float(x))
return s[s.find('.')+1:]+'.'+ s[:s.find('.')]
如果您只想拆分十进制前后的值,我建议将其作为字符串进行类型转换,然后使用“.”作为分隔符进行拆分。然后交换这两个值并在相加时返回结果。下面是一个例子
def float_swap(x):
a = float(x)
a, b = str(a).split('.')
return b + '.' + a
然后
float\u swap(2)
返回0.2
您的代码不交换
def swap(num):
num = str(float(num))
a, b = num.split('.')
res = b + '.' + a
return res
print(swap(2)) # 0.2
print(swap(21.34)) # 34.21
换成
def float_swap(x):
ix = int(x)
if x == ix:
return f"0.{ix}"
return '.'.join(str(x).split(".")[::-1])
print(float_swap(2.5))
print(float_swap(37))
输出:
5.2
0.37
5.2
0.37
或者每次都将x转换为float,因此如果您得到一个37
作为输入,那么您可以将其设置为37.0
,并且可以删除if子句。使用Python3 fstring,我想我们可以使这一点更简单:
def float_swap(x):
return f"{x % 1 * 10:.0f}.{x:.0f}"
print(float_swap(2.5))
print(float_swap(37))
输出
> python3 test.py
5.2
0.37
>
把方程简化一点,
int(x)+x-int(x)
等于什么?您可能希望将其作为字符串操作而不是数学操作来执行。@cdlane谢谢,我真不敢相信我错过了。