在SAP系统内,不同的货币的小数的位数有可能不一样的,比如:日币和人民币的就不同。

代码:

 
1
2
3
4
5
.
2.
.
.
.

运行结果:

曰元、韩元、台币等特殊货币小数位数转换

同样输入了1.8,但是输出的结果却不同,日币扩大了100倍,变成了180日元,而RMB还保持原样,1.8元,想想很合理,日元最小单位是元,而rmb最小是分。

换句话,系统自动给日元加了个转换因子100,rmb的转换因子是1.

这个转换因子学名叫货币转换因子(Currency Converting Factor),是在abap开发中的一个重要的概念。计算公式如下:

货币转换因子 = 100 × 货币的最小单位(小数点后位数,例如,小数点3位,最小单位就是0.001).

当没有小数点时,货币转换因子就是100 × 1 = 100.

货币的小数位数是保存在表TCURX中的,正常的货币都是小数点后2位的,这个是默认的,不保存在这个表中,也就是凡是在表tcurx中找不到的货币的转换因子都是100 × 0.01 = 1,比如rmb。

曰元、韩元、台币等特殊货币小数位数转换

在上图中能看到日元的是没有小数点,是0,所以日元的转换因子 = 100 × 1 = 100.

SAP提供了一个函数CURRENCY_CONVERTING_FACTOR能直接得到货币的转换因子,

曰元、韩元、台币等特殊货币小数位数转换

上面这个货币的转换过程是SAP自动实现的,比如180日元在数据库中会自动保存成1.8,但是有个前提就是一定要指定币种。

数据库中显示:

曰元、韩元、台币等特殊货币小数位数转换

而在屏幕上,读出来的就是自动转换后的正确金额。

曰元、韩元、台币等特殊货币小数位数转换

我们在ABAP编程时要注意指定币种:

1) write输出时,指定currency

 
1
.

2)  screen中指定参考单位

曰元、韩元、台币等特殊货币小数位数转换

3) ALV 中也要在catelog中指定参考货币单位,

SLIS_T_FIELDCAT_ALV-cfieldname

SLIS_T_FIELDCAT_ALV-slis_tabname

曰元、韩元、台币等特殊货币小数位数转换

OO ALV中

曰元、韩元、台币等特殊货币小数位数转换

另外:货币的一些相关表:

TCURT:货币描述文本

曰元、韩元、台币等特殊货币小数位数转换

TCURC:货币代码(Currency Codes)

曰元、韩元、台币等特殊货币小数位数转换

以上。

相关文章:

  • 2021-05-09
  • 2021-05-18
  • 2022-01-21
  • 2021-08-30
  • 2021-08-28
  • 2021-10-27
  • 2022-12-23
  • 2021-05-24
猜你喜欢
  • 2022-12-23
  • 2021-06-01
  • 2021-10-05
  • 2022-12-23
  • 2021-12-29
  • 2021-04-13
  • 2022-12-23
相关资源
相似解决方案