在COBOL中,
的结果是什么?$str = "hello:evening:";
echo preg_replace("/\:[^)]+\:/","",$str);
当RESULT1 / 2/3为:
时或者,换句话说,COBOL分区的默认舍入模式是什么?
修改:否定值会发生什么?
即使“丢弃”也是一种舍入模式,它是否相当于向负无穷大或向零舍入?
答案 0 :(得分:9)
它做了什么,如果你不告诉它做四舍五入,那就是低阶截断。有些人可能更喜欢用其他东西来定义,它并不重要,效果是一样的。截断。
负值的处理方式与正值相同(保留一个超出最终结果所需数量的有效数字,并加一个(也见后面的解释):-0.009会,到两位小数,舍入到-0.01; -0.004将舍入到-0.00。
如果您为字段指定无小数位,则只会丢弃任何小数部分。
因此,当你的COMPUTEs的所有目标都是9(4)时,它们都将包含零,包括负值。
当您的COMPUTE的所有目标都是9(4)V9时,如果没有舍入,它们将分别包含0.9,0.5和0.3,并且低位(从第二个十进制数字开始)小数部分被截断。
当你的COMPUTEs的所有目标都是9(4)V99时,它们将包含0.97,0.50和0.32,其中低位小数部分超出被截断的范围。
您可以使用ROUNDED短语对任何算术动词(ADD,SUBTRACT,MULTIPLY,DIVIDE,COMPUTE)的结果进行四舍五入。
ADD some-name some-other-name GIVIING some-result
ROUNDED
COMPUTE some-result ROUNDED = some-name
+ some-other-name
以上是相同的。
对于1985年的标准,ROUNDED使用一个额外的小数位来获得最终结果,并通过添加"一个"来调整具有定义的小数位的实际字段。在尽可能小的单位(对于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`
只有一种"模式"可以一次指定,如果没有指定MODE IS,则默认为TRUNCATION
,建立向后兼容性(并且满足那些感觉所有是某种类型的四舍五入的人。
PROHIBITED选项很有意思。例如,如果结果字段有两个小数位,则POHIBITED要求计算结果只有两个高位小数,所有低位值都为零。
重要的是要注意COMPUTE只有最终结果被舍入,中间结果不是。如果需要中间舍入,则每个舍入结果需要一个COMPUTE(或其他算术动词)。