我的价值为€1850.50。我想算一下将其四舍五入为€1851 我的公式是
select REPLACE(cast(col as CHAR(50)),'.',',')
from T;
| REPLACE(cast(col as CHAR(50)),'.',',') |
| -------------------------------------- |
| 11,22 |
目前,它可以带来1850欧元的收益。似乎将.5的值向下舍入而不是向上舍入?仅当值为.50
时才会发生此问题答案 0 :(得分:2)
您看到这种奇怪行为的原因是因为.NET(Blue Prism所基于的框架)默认使用Banker's Rounding执行舍入功能。在链接的页面上:
银行家四舍五入是一种将数量四舍五入为整数的算法,其中将与两个最接近的整数等距的数字四舍五入为最接近的偶数整数。因此,0.5向下舍入为0; 1.5向上舍入为2。
因此,在典型的计算阶段使用舍入功能时,0.5
将舍入到0
。
要对抗这种四舍五入的实现,可以使用以下两种方法之一:
方法1 -将0.5作为单独的案例进行处理
使用决策阶段来确定您要四舍五入的数字的末尾是否有十分之五。如果是,请添加另一个.5
以“向上取整”。如果还有其他十进制数字,请照常进行四舍五入。
方法2 -自定义舍入实现
使用将您的电话号码作为输入的操作创建一个新的自定义对象。编写代码阶段以按您认为合适的方式实现舍入。 This SO question body有一些不错的代码,您可以从这里开始。
答案 1 :(得分:0)
为什么不使用RndUp
函数呢?尽管我希望.5也会四舍五入。
此外,代码中功能的顺序也不正确,您需要先舍入然后转换为数字。 Round函数自动执行(或尝试执行)转换。
它看起来像这样:
RndUp(ToNumber(Replace("€1850.50","€","")))