Был на собеседовании, спросили, "в переменной какого типа лучше хранить деньги", сказал Float, мол скорость, все дела. - забраковали. Ответа на вопрос "почему" не услышал. так вот почему "деньги" нельзя хранить во Float?
Ответ
Для денег важны "копейки". Потеря любой значащей цифры в финансовой сфере недопустима. Поскольку числа хранятся в двоичной системе - почти любое десятичное нецелое число не имеет конечное количество цифр после запятой. Поскольку мы не можем хранить бесконечно большое количество цифр после запятой, часть числа теряется.
Простой пример: 5.1 переведем в двоичный вид
Целая часть имеет только 3 цифры
5₁₀ = 1*2² + 0*2¹ + 1*2⁰ = 101₂
А вот дробная...
.1₁₀ = 0*2⁻¹ + 0*2⁻² + 0*2⁻³ + 1*2⁻⁴ + 1*2⁻⁵ + 0*2⁻⁶ + 0*2⁻⁷ + 1*2⁻⁸ + 1*2⁻⁹...
Если взять только первые 7 цифр (двоичных) после запятой, получится не 0.1, а 0.09375
Комментариев нет:
Отправить комментарий