Тільки щоб дати причину тому, що всі інші говорять.
Двійкове представлення поплавця є свого роду дратівливим.
У двійковій частині більшість програмістів знають кореляцію між 1b = 1d, 10b = 2d, 100b = 4d, 1000b = 8d
Добре це працює і в інший спосіб.
.1b = .5d, .01b = .25d, .001b = .125, ...
Проблема полягає в тому, що немає точного способу представити більшість десяткових чисел, таких як .1, .2, .3 і т. Д. Все, що ви можете зробити, є приблизним у двійковій формі. Коли система друкує номери, система трохи закруглена, і вона відображає .1 замість .10000000000001 або .999999999999 (які, мабуть, так само близькі до збереженого подання, як і .1)
Редагувати з коментаря: Причиною цієї проблеми є наші очікування. Ми повністю сподіваємось, що 2/3 буде зіпсовано в якийсь момент, коли ми перетворюємо його в десяткові, або 7, або 67, або 666667 .. Але ми автоматично не очікуємо, що .1 буде округлений так само, як 2/3 - І саме це відбувається.
До речі, якщо вам цікаво число, яке воно зберігає всередині, - це чисте двійкове представлення, використовуючи двійкове "Наукове позначення". Отже, якщо ви сказали йому зберігати десяткове число 10,75d, воно буде зберігати 1010b для 10, а .11b - для десяткового. Таким чином, він буде зберігати .101011, тоді він зберігає кілька біт в кінці, щоб сказати: Перемістіть десяткову точку на чотири місця вправо.
(Хоча технічно це вже не десяткова крапка, це тепер двійкова крапка, але ця термінологія не зробила б речі зрозумілішими для більшості людей, які знайдуть цю відповідь будь-якого використання.)