Тимофей Мартынов
Тимофей Мартынов личный блог
28 июня 2017, 15:18

Новости современного программирования. Когда 2+2≠4

Я тут подахренел немного.

Сделали мы портфели на смартлабе (тут). Вот я вбиываю в портфель покупку USDRUB по 56,45.
(я действительно там покупал баксы в мае). 
Бах! А у меня в таблице тут же вбитое число отражается как 56,449999999999996.

Программист мне сказал, что НЕВОЗМОЖНО отражать число 56,45 как 56,45, а можно его только отражать как 56,449999999999996.
И на мои уговоры что-то с этим поделать посоветовал мне пойти поучить матчасть.

Собрали мы учёный совет. начали думать. Несколько дней думали, так и не нашли решения.
В процессе обсуждения звучали такие слова как longint, мантисса, varchar,10^n в нужной степени, операции без радикалов и т.д.

Проблема в том, что число знаков после запятой может быть и 5 (для некоторых акций).
Поэтому просто округлить все числа до 2 знаков после запятой не получится.
Как изящно выйти из ситуации?
85 Комментариев
  • S-L is SCKS
    28 июня 2017, 15:22
    а почему бы перед внесением данных в таблицу не «смотреть» что за тип актива? если акция, смотреть сколько в лоте штук, сделки на бирже не проходят с долями копейки… и потом все показывать в нормальном виде…
  • /\../
    28 июня 2017, 15:29

    Смотря какой язык. Вообще-то, тип данных Money есть. Decimal тоже подходит. Пример: http://support.sas.com/kb/51/034.html.

  • MixStyleTrader
    28 июня 2017, 15:30
    Округлять перед показом, если число очень длинное)
  • П М
    28 июня 2017, 15:30
    п… ц он у тебя гонщик.
    пусть делает printf("%.2f", num);
    всё номано будет.
    весь мир живёт с этим и норм, а он не может.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн