二维码

[基础语法] ABAP中字符Char类型变量比较大小解析

Twilight发表于 2015-03-16 17:45tougegelol 最后回复于 2015-05-11 15:37 [复制链接] 7318 1

我们知道数值类型很容易比较,实际有些场景中会将数字类型的变量存储为C类型,再取出用来比较是就会出错。

下面是一个小例子:
  1. DATA:lc_1 TYPE c LENGTH 5,
  2.      lc_2 TYPE c LENGTH 5.

  3. lc_1 = '12'.
  4. lc_2 = '110'.

  5. IF lc_1 > lc_2.
  6.   WRITE: / lc_1 ,'>' ,lc_2.
  7. ELSE.
  8.   WRITE: / lc_1 ,'<=' ,lc_2.
  9. ENDIF.
复制代码


程序执行结果:
comparing char.jpg
char类型实际是按照顺序比较单个数值的,此例中第一位都是1,第二位lc_1(2)> lc_2 (1),所以有了12>110的现象。debug查看他们的16进制的值时你就会更明白了。

我们可以将单引号除去,就会发现比较正常了
  1. DATA:lc_1 TYPE c LENGTH 5,
  2.      lc_2 TYPE c LENGTH 5.

  3. lc_1 = 12.
  4. lc_2 = 110.

  5. IF lc_1 > lc_2.
  6.   WRITE: / lc_1 ,'>' ,lc_2.
  7. ELSE.
  8.   WRITE: / lc_1 ,'<=' ,lc_2.
  9. ENDIF.
复制代码

debug你会发现,lc_1 = 空空空12,lc_2 = 空空110,第三位1>空,所以正常了,当然有时我们还需要对类型进行强制转化成数值类型后,才比较大小呢,只是我们有时不会注意...
回复

使用道具 举报

tougegelol
经常出这个问题···我有时候会把前面填满0再比较~~~
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表