Я знаю, що існує безліч способів урізати або додати кінцеві нулі до вашого подвійного, використовуючи точність виведення або перетворення в рядки.
Але чи є спосіб зберегти нулі на фактичному подвійному, плаваючому або іншому типі даних, що зберігає кінцевий 0. Як і в .1! = .10
Причина полягає в тому, що нуль показує, що ми знаємо, що наступна цифра - нуль. .1 показує все, що ми знаємо, до 1, а не після.
Звичайно, я можу перетворити на рядок або зробитиспеціальний клас, який відстежує його. Я використовую багато подвійних, хоча, і хотів би пропустити деякі роботи навколо, як це, якщо це можливо. Все, що я можу знайти, - це способи, щоб зіткнутися з рядками і виведенням. Щось схоже на double.precision (x) =)
Дякую! -Тим
Відповіді:
4 для відповіді № 1Формати IEEE з плаваючою комою не мають декількох способів зберігати одне і те ж (кінцеве, ненульове) значення, тому ні, ви не можете зробити це внутрішньо для числової змінної.
Вам потрібно буде тримати пару (value, precision)
(або (value, sigfigs)
або (value, uncertainty)
- в залежності від того, що для вас найважливіше).
0 для відповіді № 2
Значення з плаваючою точкою фактично зберігають кінцеві нулі аж до точності, яку диктує формат.
Наприклад, double
зберігає приблизно 17 значущих цифр.
Тому, коли ми маємо a double
люблю 0.1
, значення фактично зберігається як щось подібне 0.10000000000000000
(у двійковому, а не як рядок, як я написав тут). Так ми знати наступну цифру після 1
є 0
.