Я тут подахренел немного.
Сделали мы портфели на смартлабе (
тут). Вот я вбиываю в портфель покупку USDRUB по 56,45.
(я действительно там покупал баксы в мае).
Бах! А у меня в таблице тут же вбитое число отражается как 56,449999999999996.
Программист мне сказал, что НЕВОЗМОЖНО отражать число 56,45 как 56,45, а можно его только отражать как 56,449999999999996.
И на мои уговоры что-то с этим поделать посоветовал мне пойти
поучить матчасть.
Собрали мы учёный совет. начали думать. Несколько дней думали, так и не нашли решения.
В процессе обсуждения звучали такие слова как longint, мантисса, varchar,10^n в нужной степени, операции без радикалов и т.д.
Проблема в том, что число знаков после запятой может быть и 5 (для некоторых акций).
Поэтому просто округлить все числа до 2 знаков после запятой не получится.
Как изящно выйти из ситуации?
Смотря какой язык. Вообще-то, тип данных Money есть. Decimal тоже подходит. Пример: http://support.sas.com/kb/51/034.html.
пусть делает printf("%.2f", num);
всё номано будет.
весь мир живёт с этим и норм, а он не может.