как работает Round?

отредактировано 23:22 Раздел: FastReport 4.0
Как работает функция round?
Почему
round(0.5) = 0
а
round(1.5) =2
???

Комментарии

  • отредактировано 23:22
    Это так называемое банковское округление - вариант округления к ближайшему целому,
    в котором добавлено дополнительное правило: если дробная часть равна 0,5,
    округление происходит к ближайшему чётному.
  • xlaalaaxlaalaa Минск
    отредактировано 23:22
    А еще зачем то результат ROUND приводится к INTEGER. Из за чего суммы больше 2-х миллиардов не округляет. См. ответствующий фрагмент кода в файле fs_isysrtti.pas
    function TfsSysFunctions.CallMethod6(Instance: TObject; ClassType: TClass;
      const MethodName: String; Caller: TfsMethodHelper): Variant;
    begin
      if MethodName = 'ROUND' then
        Result := Integer(Round(Caller.Params[0]))
      else if MethodName = 'TRUNC' then
        Result := Integer(Trunc(Caller.Params[0]))
    

    Нам пришлось INTEGER убрать.
  • отредактировано 23:22
    xlaalaa написал: »
    А еще зачем то результат ROUND приводится к INTEGER. Из за чего суммы больше 2-х миллиардов не округляет. См. ответствующий фрагмент кода в файле fs_isysrtti.pas

    Т.к. фактически скрипт не поддерживает int64, можно конечно объявить переменную как вариант. Но в остальных случаях будет вызывать переполнение.

    Округлением можно управлять через SetRoundMode или напрямую через Set8087CW.
  • xlaalaaxlaalaa Минск
    отредактировано 23:22
    написал: »
    Т.к. фактически скрипт не поддерживает int64

    Засада. :) Завтра перепроверю.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.