COBOL中4位小数转2位小数舍入问题求助:MOVE语句未正确舍入
COBOL中实现4位小数转2位小数的四舍五入方法
你遇到的是COBOL默认MOVE操作的截断行为——当将多小数位的变量赋值给少小数位的变量时,默认会直接截断多余的小数位,而非四舍五入。要实现正确的舍入,可通过以下几种方法解决:
使用
MOVE ... ROUNDED语句
这是COBOL内置的最直接的舍入方式,只需在MOVE语句后添加ROUNDED关键字,COBOL会自动根据目标变量的小数位数对源变量进行四舍五入:MOVE VAR-A TO VAR-B ROUNDED.执行后,VAR-B的值会是
1111.13,符合预期。使用
COMPUTE ... ROUNDED语句
也可以通过COMPUTE语句配合ROUNDED短语实现相同效果,语法如下:COMPUTE VAR-B ROUNDED = VAR-A.该语句会将VAR-A的值四舍五入后赋值给VAR-B,结果与第一种方法一致。
手动调整数值(仅适用于正数场景)
如果因环境限制无法使用ROUNDED短语,可通过手动给源变量加0.005后再赋值的方式实现舍入(正数加,负数需减,因此通用性较差):ADD 0.005 TO VAR-A. MOVE VAR-A TO VAR-B.此方法通过将第3位小数及以后的数值进位,再截断得到舍入结果,但需注意处理负数时要反向操作(减去0.005),否则会得到错误结果。
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

