在COBOL中,结果是什么
COMPUTE RESULT1 = 97 / 100
COMPUTE RESULT2 = 50 / 100
COMPUTE RESULT3 = 32 / 100
COMPUTE RESULT4 = -97 / 100
COMPUTE RESULT5 = -50 / 100
COMPUTE RESULT6 = -32 / 100
当RESULT1 / 2/3是:
或者,换句话说,COBOL除法的默认舍入模式是什么?
编辑:负值会怎样?
甚至“丢弃”都是一种舍入模式,是否等效于向负无穷大或向零舍入?
除非您告知,否则COBOL不会四舍五入。
如果您不告诉它进行舍入,它所做的就是低阶截断。有些人可能更喜欢说其他的东西,这并不重要,效果是一样的。截断。
负值的处理方式与正值相同(请保留最终结果所需的有效位数,然后再加上一位(也请参见后面的说明):-0.009将小数点后两位至- 0.01; -0.004将四舍五入为-0.00。
如果您没有为字段指定小数位,则任何小数部分都将被简单丢弃。
因此,当您的COMPUTE的所有目标均为9(4)时,它们将全部包含零,包括负值。
如果您的COMPUTE的所有目标均为9(4)V9,而没有四舍五入,则它们将分别包含0.9、0.5和0.3,其中低阶(从第二个十进制数字开始)小数部分被截断。
并且,当您的COMPUTE的所有目标均为9(4)V99时,它们将包含0.97、0.50和0.32,其低位小数部分将被截断。
通过对任何算术动词(ADD,SUBTRACT,MULTIPLY,DIVIDE,COMPUTE)的结果使用ROUNDED短语来对语言进行四舍五入。
ADD some-name some-other-name GIVIING some-result
ROUNDED
COMPUTE some-result ROUNDED = some-name
+ some-other-name
以上是彼此等效的。
按照1985年标准,ROUNDED将最终结果加上小数点后一位,并通过以最小可能的单位加“ 1”来调整具有定义的小数点后的实际字段(对于V99,将增加百分之一百,在V999时将加上千分之一,不带小数位将加一,而任何缩放量(请参见图片字符P)将加一)。
您可以考虑将一个绝对值相加,结果保留原始符号。或者,您也可以将其视为以其他任何方式完成,以达到相同的结果。标准描述了四舍五入,实现以其喜欢的任何方式均符合标准。我的描述是对人类理解的描述。没有编译器需要按照我所描述的方式实现它,但是从逻辑上讲结果是相同的。
不要为实现它而烦恼。
2014年标准取代2002年标准,还有更多的取整选项,对于您必须编码的85个标准,这很容易使用(很容易使用REDEFINES)。
`ROUNDED` `MODE IS` `AWAY-FROM-ZERO` `NEAREST-AWAY-FROM-ZERO` `NEAREST-EVEN` `NEAREST-TOWARD-ZERO` `PROHIBITED` `TOWARD-GREATER` `TOWARD-LESSER TRUNCATION`
一次只能指定一个“模式”,如果未指定MODE IS,则默认值为TRUNCATION
,建立向后兼容性(并使满足所有感觉的人都满意了)。
PROHIBITED选项很有趣。例如,如果结果字段具有两个小数位,则POHIBITED要求计算的结果仅具有两个高位小数位,并且所有低位值均为零。
重要的是要用COMPUTE注意,只有最终结果是四舍五入的,中间结果不是。如果需要中间舍入,则每个舍入结果需要一个COMPUTE(或其他算术动词)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句