在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
Run Code Online (Sandbox Code Playgroud)
当RESULT1/2/3为:
或者,换句话说,COBOL部门的默认舍入模式是什么?
编辑:负值会发生什么?
即使"丢弃"也是一种舍入模式,它是否相当于向负无穷大或向零舍入?
除非你告诉它,否则COBOL不会舍入.
它做了什么,如果你不告诉它做四舍五入,那就是低阶截断.有些人可能更喜欢用其他东西来表达,这并不重要,效果是一样的.截断.
负值以与正值相同的方式处理(保留超出最终结果所需的有效数字,并添加一个(也见后面的解释):-0.009将,到两个小数位,舍入到 - 0.01; -0.004将舍入到-0.00.
如果为字段指定无小数位,则将简单地丢弃任何小数部分.
因此,当你的COMPUTEs的所有目标都是9(4)时,它们都将包含零,包括负值.
当你的COMPUTEs的所有目标都是9(4)V9时,没有舍入,它们将分别包含0.9,0.5和0.3,并且低位(从第二个十进制数字开始)小数部分被截断.
当你的COMPUTEs的所有目标都是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
Run Code Online (Sandbox Code Playgroud)
以上是相同的.
对于1985年的标准,ROUNDED将最终结果带有一个额外的小数位,并通过在尽可能小的单位添加"1"来调整具有定义小数位的实际字段(对于V99,它将添加百分之一,在V999它将添加千分之一,在没有小数位的情况下,它将添加一个,任何缩放量(参见PICture字符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`
Run Code Online (Sandbox Code Playgroud)
只有一个"模式"可以在同一时间内指定,如果没有指定模式默认为TRUNCATION,建立向后兼容性(与满足那些谁觉得一切都被四舍五入某种类型的.
PROHIBITED选项很有趣.例如,如果结果字段有两个小数位,则POHIBITED要求计算结果只有两个高位小数,所有低位值都为零.
重要的是要注意COMPUTE只有最终结果是四舍五入的,中间结果不是.如果需要中间舍入,则每个舍入结果需要一个COMPUTE(或其他算术动词).