Python tkinter, как перестать быть такими длинными десятичными знаками

Я создаю калькулятор прямо сейчас, и когда я ввожу запись или даже оболочку, которая использует eval, как мой калькулятор, 3-0.1 - это не 2,9, как обычный калькулятор. Это дает вам очень длинные числа, например 2,8999999999. Как это исправить и сделать всегда округлым?

Как вы показываете стоимость? Вы явно устанавливаете содержимое Entry или Label? Вызов var.set(str(n)) на StringVar? Вызов var.set(n) на DoubleVar? …?

abarnert 01.05.2018 23:29

Если вы делаете какие-либо действия, которые явно преобразуются в строку, вы должны использовать форматирование строки, чтобы указать именно тот формат, который вы хотите отобразить, как в Ответ Боба. Если вы используете DoubleVar и позволяете Tcl / Tk выполнять форматирование за вас, это немного сложнее.

abarnert 01.05.2018 23:30

Причина, по которой эти числа не совсем то, что вы ожидаете, заключается в ошибка с плавающей запятой. Если вы хотите выполнять «более правильные» численные вычисления, взгляните на библиотеки Python decimal и fractions.

felixphew 02.05.2018 07:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
693
2

Ответы 2

Вы можете округлить результат, используя функцию round().

Использование: round(number, no. of decimal places)

Например:

num1 = 1/3
num2 = round(num1, 2)  # num2 would be 0.33

num3 = 2/3
num4 = round(num3, 3)  # num4 would be 0.667

Вы должны использовать форматирование строки для вывода вашей программы:

https://docs.python.org/3.6/library/string.html#format-string-syntax

Т.е.

float_result = 3 - 0.1
formatted_to_two_decimal_places = '{:.2f}'.format(float_result)
# or you can do ... = f'{float_result:.2f}' in python 3.6+
print(formatted_to_two_decimal_places)

@abarnert Раньше Python гордился тем, что у него есть только один очевидный способ делать что-то конкретное. Сколько сейчас существует способов форматирования строк?

Mark Ransom 01.05.2018 23:38

@MarkRansom Функция format - это один из очевидных способов форматирования одиночного значения. Это не то же самое, что объединить несколько форматированных значений и статический текст, так почему это должна быть одна и та же функция?

abarnert 02.05.2018 00:00

@MarkRansom Если вы не спрашиваете о f-струнах и str.format. str.format предназначен для обратной совместимости, потому что еще в 2006 году никто не думал о хорошем дизайне, но это не делает их хорошим выбором для нового кода; f-струны - один из очевидных способов сделать это.

abarnert 02.05.2018 00:02

Другие вопросы по теме