如何在TOSCA自动化中将Buffer结果向上取整至两位小数?
如何在TOSCA自动化中将Buffer结果向上取整至两位小数?
看起来你在TOSCA里处理小数取整时碰到了个挺闹心的问题——明明想把19.905处理成两位小数的19.91,用{MATH[Round({B[Calculation]},2)]}却只得到了19.9,这确实有点反直觉对吧?我来帮你捋捋原因和解决办法:
为什么Round函数会返回19.9?
大概率是因为TOSCA的Round函数采用了银行家舍入法(四舍六入五成双):当舍去部分的最高位是5,且前一位数字是偶数时,就直接舍去;如果是奇数才进一位。你的计算值是19.905,第二位小数是0(偶数),所以Round到两位小数后得到的是19.90,而TOSCA显示时会自动省略末尾的0,就变成了19.9。
怎么得到你想要的19.91?
如果你需要的是把19.905向上取整到两位小数(不管第三位小数是什么,只要大于0就进一位),可以用Ceiling函数结合乘法/除法来实现:
{MATH[Ceiling({B[Calculation]}*100)/100]}
原理很简单:
- 先把
Calculation里的数值乘以100,把两位小数后的部分转成整数位(19.905*100=1990.5) - 用
Ceiling函数取大于等于这个数的最小整数(1990.5的Ceiling结果是1991) - 再除以100,把数值转回两位小数(1991/100=19.91)
确保显示为两位小数格式
如果还需要确保结果始终显示为两位小数(比如19.90不会变成19.9),可以结合FormatNumber函数:
{FormatNumber({MATH[Ceiling({B[Calculation]}*100)/100]},2)}
这样不管结果的末尾是不是0,都会强制显示两位小数。
试试这个方法,应该就能得到你想要的19.91啦!
备注:内容来源于stack exchange,提问作者Naz
相关产品推荐
相关产品推荐

