|
|
1
5
内联声明根据右侧(rhs)表达式中的类型指定数据类型。通过算术表达式,编译器根据 calculation type . 首先,2和5被视为类型I(4字节整数),因此即使运算符是除法(在这种情况下是整数除法),结果也是类型I。 然后,50也被认为是类型i,因为它与另一个i-type数据对象(子表达式2/5的结果是类型i)一起使用,所以结果也是类型i。
所以,在你的例子中,
在运行时,因为lhs和rhs数据对象都是i类型,所以计算类型也是i。因此,2/5等于0.4四舍五入为0,因为它是整数除法,默认的abap四舍五入为“上半”(0.4的四舍五入为0,但0.5的四舍五入为1)。
解决方法是显式定义
小心 下一个解决方案是:如我所说,c导致计算类型p和许多小数,因此我们可以认为这个示例是一个很好的解决方案:
但是对于内联声明,p计算类型会导致p类型的数据对象 但是 小数点后有0位,因此结果将被其他数字截断(此处为8而不是50):
|