Проблема округления Blueprism - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть стоимость € 1850,50. Я хочу, чтобы расчет округлил до 1851 Моя формула

ToNumber(Round(Replace([Item Data.LHC Part Anaes Rate 2019 (No Rounding)],"€",""))) 

В настоящее время возвращается 1850 евро. Кажется, чтобы округлить значения .5 вниз, а не вверх? Эта проблема возникает только при значении .50

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Причина, по которой вы видите это странное поведение, заключается в том, что .NET (основа, на которой основан Blue Prism) использует Банковское округление для выполнения функций округления по умолчанию. Со связанной страницы:

Банковское округление - алгоритм округления величин до целых чисел, в котором числа, которые равноудалены от двух ближайших целых, округляются до ближайшего четного целого числа. Таким образом, 0,5 округляется до 0; 1,5 раунда до 2.

Таким образом, при использовании функциональности округления на типичном этапе вычисления, 0.5 округляется до 0.

Чтобы противостоять этой реализации округления, вы можете использовать один из двух методов:

  • Метод № 1 - Обработка 0,5 как отдельного случая

    Используйте этапы принятия решения, чтобы определить, будет ли число, которое вы пытаетесь округлить, иметь пять десятых в конце. Если да, добавьте еще .5 к «округлить». Если есть другое десятичное число, выполните округление в обычном порядке.

  • Метод # 2 - Пользовательская реализация округления

    Создайте новый пользовательский объект с действием, которое принимает ваш номер в качестве ввода. Напишите этап кода для реализации округления по своему усмотрению. В этом теле вопроса SO есть хороший код, с которого можно начать.

0 голосов
/ 06 ноября 2018

Почему бы не использовать вместо этого функцию RndUp? Хотя я ожидаю, что и .5 тоже будут округлены.

Кроме того, порядок функций в вашем коде неправильный, вы сначала округляете, а затем конвертируете в число. Функция Round выполняет (или пытается) выполнить преобразование автоматически.

Это может выглядеть так:

RndUp(ToNumber(Replace("€1850.50","€","")))
...