Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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_Floating Point - Fatal编程技术网

Python 在十进制前后交换数字

Python 在十进制前后交换数字,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)

我正在编写一个函数,它接受一个正数,交换小数点前后的数字,并将其作为字符串返回。如果输入是整数,则返回的字符串以“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)     # 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谢谢,我真不敢相信我错过了。