Анонімний користувач
Обмеження плаваючих значень до двох знаків після коми
Я хочу, щоб "а" було округлено до 13,95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
Функція round
працює не так, як я очікував.
1512
3
Ви зіткнулися з старою проблемою з числами з плаваючою комою, яка полягає у тому, що не всі числа можуть бути точно представлені. Командний рядок просто показує вам повну форму числа з плаваючою комою з пам'яті.
У випадку представлення з плаваючою комою, ваша округлена версія буде тим самим числом. Оскільки комп'ютери є двійковими, вони зберігають числа з плаваючою комою як ціле число, а потім ділять його на ступінь двійки, тому 13.95 буде представлено подібно до 125650429603636838/(2**53).
Числа подвійної точності мають 53 біти (16 цифр) точності, а звичайні числа з плаваючою комою мають 24 біти (8 цифр) точності. Для зберігання значень використовується тип з плаваючою комою в Python з подвійною точністю.
Наприклад,
Якщо вам потрібні лише два знаки після коми (наприклад, для відображення вартості валюти), то у вас є кілька кращих варіантів:
Ви можете змінити формат виводу:
Він робить саме те, що ви йому сказали, і працює коректно. Дізнайтеся більше про плутанину з плаваючою комою і, можливо, спробуйте замість цього використовувати десяткові об'єкти.