Применение MidpointRounding для округления дробных

Задача: округлять дробную часть десятичного числа вверх.

Нашёл статью с методом на Microsoft https://docs.microsoft.com/en-us/dotnet/api/system.midpointrounding?vie…;

 

В БП пробую применять формулу Decimal.Round(([#Исходное дробное число#]), 1, MidpointRounding.AwayFromZero) - ругается, что "Допущена ошибка в формуле: Параметр "MidpointRounding" не найден.]."



При этом, если не использовать MidpointRounding, а просто указывать количество знаков после запятой Decimal.Round(([#Исходное дробное число#]), 1) - то формулу принимает и пересчёт ведёт, но по правилам округления, а не в бОльшую сторону, как мне нужно.

 

Может быть кто-то сталкивался с такой же задачей? Как решали?

Нравится

1 комментарий
Лучший ответ

Сергей, в отличие от старого движка процессов, в котором можно было указать в элементе-формуле или условии произвольный фрагмент C#-кода, в нынешнем, интерпретируемом, работа с формулами может не поддерживать все особенности функций от Microsoft.

 

Как обходной вариант, можно создать блок-скрипт, где считать значение из параметра, вычислить округление нужным способом и записать в другой.

decimal positiveValue = Get<decimal>("ProcessSchemaParameterPositiveValue");
decimal result = Math.Round(positiveValue, 1, MidpointRounding.ToEven);
Set<decimal>("ProcessSchemaParameterResult", result);
return true;

А если таких вычислений у Вас в процессах много, можно создать свой UserTask с параметрами, куда передавать значения и способ округления.

Сергей, в отличие от старого движка процессов, в котором можно было указать в элементе-формуле или условии произвольный фрагмент C#-кода, в нынешнем, интерпретируемом, работа с формулами может не поддерживать все особенности функций от Microsoft.

 

Как обходной вариант, можно создать блок-скрипт, где считать значение из параметра, вычислить округление нужным способом и записать в другой.

decimal positiveValue = Get<decimal>("ProcessSchemaParameterPositiveValue");
decimal result = Math.Round(positiveValue, 1, MidpointRounding.ToEven);
Set<decimal>("ProcessSchemaParameterResult", result);
return true;

А если таких вычислений у Вас в процессах много, можно создать свой UserTask с параметрами, куда передавать значения и способ округления.

Показать все комментарии