Как отформатировать число с плавающей точкой в ​​целое, если значение целое. То есть отображать 13.0 как 13, а 13.5 как 13.5 - PullRequest
1 голос
/ 06 февраля 2020

[Работа с Python 3.x]

Я пытаюсь отобразить двухмерные уравнения линий. Я предполагаю, что коэффициенты или константы являются плавающими, потому что возможно, что они могут быть плавающими. Однако, если они являются целыми числами, я хотел бы показать их как целые числа.

То есть вместо

x + 3.0y = 13.0

Я хочу отобразить

x + 3y = 13

Однако

x + 3,5y = 13,5

должно оставаться как есть.

Как мне сделать этот вид условного форматирования?

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

При условии, что для функции будет передан только точный множитель (без неизвестной переменной), вход и выход являются строками:

def simplifyFloat(str):
    f = float(str)
    if f % 1 == 0: #if f has some floating point this is going to be false
        f = int(f)
    return str(f)

И использование:

equation = '2.0x + 3.5y + 2'
x_part, o, y_part, o, const_part = equation.split(' ') # o variables for dumping operators

# [:-1] before string means you get rid of the last letter, which is 'x' and 'y'
print(simplifyFloat(x_part[:-1])) # output '2'
print(simplifyFloat(y_part)[:-1]) # output '3.5'
0 голосов
/ 13 февраля 2020

Эффективный способ, которым я могу придумать, - создать функцию, которая возвращает целое число или число с плавающей запятой, в зависимости от случая. Функция может иметь вид

def check(x):
    if int(x) == x:
        return int(x)
    else:
        return float(x)

Теперь любое число можно поставить в уравнение как check(1.0) * x + check(13) * y = check(13.5). Это приведет к 1x + 13y = 13.5. Надеюсь, это поможет!

0 голосов
/ 06 февраля 2020

Возможно, есть более эффективные способы сделать это, но ветвление со значением ceil работает правильно:

import math

number1 = 3.0
number2 = 3.5

def integral_formatting(n):
    return n if n != math.ceil(n) else math.ceil(n) 

>>> integral_formatting(number1)
3
>>> integral_formatting(number2)
3.5
...