Blueprism 舍入问题

Blueprism Rounding Issue

我的价值为 1850.50 欧元。我想要一个计算结果将其四舍五入为 1851 欧元 我的公式是

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

目前,它正在带回 1850 欧元。似乎将 .5 的值向下舍入而不是向上舍入?此问题仅在值为 .50

时发生

为什么不使用 RndUp 函数呢?虽然我希望 .5 也被四舍五入。

另外,您代码中的函数顺序不正确,您是先四舍五入,然后再转换为数字。 Round 函数自动执行(或尝试)进行转换。

它可能看起来像这样:

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

您看到这种奇怪行为的原因是 .NET(Blue Prism 所基于的框架)默认使用 Banker's Rounding 执行舍入函数。来自链接页面:

Bankers Rounding is an algorithm for rounding quantities to integers, in which numbers which are equidistant from the two nearest integers are rounded to the nearest even integer. Thus, 0.5 rounds down to 0; 1.5 rounds up to 2.

因此,在典型计算阶段利用舍入功能时,0.5 将舍入为 0

要对抗这种舍入的实现,您可以使用以下两种方法之一:

  • 方法#1 - 将 0.5 作为单独的案例进行处理

    使用决策阶段来确定您尝试四舍五入的数字最后是否有十分之五。如果是,再添加一个 .5 到 "round up"。如果有任何其他小数,则照常进行四舍五入。

  • 方法#2 - 自定义舍入实现

    使用将您的号码作为输入的操作创建一个新的自定义对象。编写一个代码阶段来实现您认为合适的舍入。 This SO question body 有一些不错的代码,您可以从中着手。