Работа с параметрами процедур в REAL

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8350
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 35 раз
Поблагодарили: 111 раз

Работа с параметрами процедур в REAL

Сообщение Игорь Столяров »

Всем привет !

Неоднократно поднималась тема передачи данных в параметрах REAL с потерей точности.
Прозвучали конкретные рекомендации. Можно я ещё раз их проговорю и покажу реализацию ?

Предположим мы хотим получить некие данные с точностью 2 и 3 знака после десятичной точки (цена и кол-во).

Код: Выделить всё

!!! Возвращает форматированное дробное число как строку
NumFormat  Procedure(Real rDigit,Byte bAccuracy = 1)  !,String
dDigit   Decimal(15,3)
  Code  
  Execute bAccuracy
    dDigit = Round(rDigit,.01)   ! 1. Цена
    dDigit = Round(rDigit,.001)  ! 2. Кол-во
  end  
  Return Clip(Left(Format(dDigit,     '@n-_15.' & Choose(bAccuracy,'2','3')     )))
Вроде бы все вызовы в стиле NumFormat(10 / 3) дают ожидаемые значения.
Это правильное решение для работы с параметрами REAL ? Спасибо ! :D
За теми, кто отстал, не возвращаться ! 🏴‍☠️ Кодекс
Ответить