Замена чисел до и после десятичной дроби

#python #python-3.x #math #floating-point

#python #python-3.x #математика #с плавающей запятой

Вопрос:

Я пишу функцию, которая принимает положительное число и меняет местами числа до и после десятичной точки и возвращает их в виде строки. Если входные данные являются целым числом, то возвращаемая строка начинается с «0». т.е. 37 -> 0.37

 def float_swap(x):
    a = x - int(x)
    b = int(x)
    return str(b a)

print(float_swap(2.5))
# 2.5 
  

Где я здесь ошибаюсь?

Комментарии:

1. Немного упростите уравнение — что int(x) x - int(x) равно? Возможно, вы захотите сделать это как строковую операцию, а не как математическую операцию.

Ответ №1:

Обратите внимание на комментарии, которые я вставил в ваш код, чтобы лучше понять, что происходит:

 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
  

Комментарии:

1. @cdlane Спасибо, я не могу поверить, что пропустил это.

Ответ №2:

Причина ошибки указана в предыдущих ответах. Если вас интересует решение, вы можете сделать следующее:

 def float_swap(x):
    s=str(float(x))
    return s[s.find('.') 1:] '.'  s[:s.find('.')]
  

Ответ №3:

Если вы просто хотите разделить значения до и после десятичной дроби, я бы предложил типизацию в виде строки, а затем разделение с использованием ‘.’ в качестве разделителя. Затем замена двух значений и возврат результата при сложении. Ниже приведен пример

 def float_swap(x):
    a = float(x)
    a, b = str(a).split('.')
    return b   '.'   a
  

Затем float_swap(2) возвращает 0.2

Ответ №4:

 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
  

Ответ №5:

Ваш код не меняется местами.

Измените его на

 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
  

или преобразуйте x в float каждый раз, поэтому, если вы получаете a 37 в качестве входных данных, вы делаете это 37.0 и можете удалить предложение if.

Ответ №6:

Используя 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
>