Для более удобной работы с числом с плавающей запятой (valueDouble), в support реализованы вспомогательные методы, позволяющие получить необходимые данные как для вычисления, так и для формирования строковых обозначений:
BigDecimal getDoubleValue(valueDouble value, Integer precision, BigDecimal koef) – получить основное значение в базовой единице измерений, домноженное на коэффициент (koef) и округленное до заданного количества знаков (precision). Если value равно null, то функция вернет 0. В любом из параметров может быть передан null, в этом случае функция вернет число без домножения на коэффициент (koef) и/или округления до заданного количества знаков (precision). Функция вернет значение только для getValueType(): NORMAL, DEFLECTION, в противном случае функция вернет ошибку;
BigDecimal getLeftDoubleValue(valueDouble value, Integer precision, BigDecimal koef) – получить значение слева в базовой единице измерений, домноженное на коэффициент (koef) и округленное до заданного количества знаков (precision). Если value равно null, то функция вернет 0. В любом из параметров может быть передан null, в этом случае функция вернет число без домножения на коэффициент (koef) и/или округления до заданного количества знаков (precision). Функция вернет значение только для getValueType: dtRange, dtDeflection, в противном случае функция вернет ошибку;
BigDecimal getRightDoubleValue(valueDouble value, Integer precision, BigDecimal koef) – получить значение справа в базовой единице измерений, домноженное на коэффициент (koef) и округленное до заданного количества знаков (precision). Если value равно null, то функция вернет 0. В любом из параметров может быть передан null, в этом случае функция вернет число без домножения на коэффициент (koef) и/или округления до заданного количества знаков (precision). Функция вернет значение только для getValueType: dtRange, dtDeflection, в противном случае функция вернет ошибку;
DoubleFormatType getValueType(valueDouble value) – получить тип числа:
NORMAL – простое число;
RANGE – диапазон;
DEFLECTION – число с отклонениями;
Integer getEiPrecision(valueDouble value) – получить количество знаков после запятой (точность), заданное пользователем при вводе. Если точность не определена, то вернуть null;
String getEiCode(valueDouble value) – получить гуид единицы измерения, в которой пользователь задал значение. Если ЕИ не определена для атрибута, то вернет null;
BigDecimal getEiKoef(valueDouble value) – получить коэффициент пересчета в базовую ЕИ. Если коэффициент запрашивается для базовой ЕИ, то будет возвращена 1;
String getEiGuid(valueDouble value) - получить гуид единицы измерения. Если value==null, то вернуть пустую строку;
BigDecimal getValueInBaseEi(BigDecimal value, String EiGuid) - пересчитать значение (value) из заданной ЕИ (EiGuid) в базовую ЕИ. Если EiGuid является базовой или содержит null или пустую строку, то вернуть значение value без модификаций;
createDblSimpleValue(BigDecimal value, Integer precision, String eiGuid) - создать valueDouble на основе переданного числа value, в заданной единице измерения (eiGuid), которое надо отображать пользователю с заданной точностью precision. Если точность не указана (null), то значение не будет округляться для пользователя. Если eiGuid не указана (null), то считается что значение value передается в базовой единице измерения;
createDblRangeValue(BigDecimal leftValue, BigDecimal rightValue, Integer precision, String eiGuid) - создать valueDouble на основе переданного диапазона leftValue и rightValue, в заданной единице измерения (eiGuid), которые надо отображать пользователю с заданной точностью precision. Если точность не указана (null), то значение не будет округляться для пользователя. Если eiGuid не указана (null), то считается что значения leftValue и rightValue передаются в базовой единице измерения.
createDblDeflectionValue(BigDecimal value, leftValue, rightValue, Integer precision, String eiGuid) - создать valueDouble на основе переданного числа value c отклонениями leftValue и rightValue, в заданной единице измерения (eiGuid), которые надо отображать пользователю с заданной точностью precision. Если точность не указана (null), то значение и отклонения не будут округляться для пользователя. Если eiGuid не указана (null), то считается что значение value и отклонения leftValue и rightValue передаются в базовой единице измерения.
Методы ExchangeComplexDouble
String getMeasurementUnit – получить гуид единицы измерения Semantic MDM, в которой она должна отображаться в Semantic MDM;
ValueDoubleTransfer getValue – получить объект класса ValueDoubleTransfer со следующими методами:
double value – содержит основное значение атрибута в базовой единице измерения, если из внешней системы передается простое число с плав. запятой или число с отклонениями. Отклонения для числа с плав. запятой будут храниться в min и max соответственно. Для диапазона, должно содержать центральное значение диапазона, к которому при прибавлении значения из min, получаем нижнюю границу отклонения, а при прибавлении значения из max, верхнее отклонение;
double min – получить значение нижнего отклонения;
double max – получить значение верхнего отклонения;
encodedString – строковое кодированное значение, содержит значения value, min и max в той ЕИ, в которой задал значение пользователь. Значение в encodedString кодируется следующим образом: value=<среднее число >; min=<нижнее отклонение, всегда меньше нуля>; max=<верхнее отклонение, всегда больше нуля>; measure=<числовой идентификатор ЕИ>; precision=<количество знаков после запятой для округления>; type=<тип ЕИ: “NORMAL”, “RANGE”, “DEFLECTIONS”>. Примеры кодированной строки encodedString: