2015-11-03 196 views
4

我有一个格式化逗号作为小数点分隔符且没有任何千位分隔符(点和空格)的十进制数字的要求。使用逗号作为小数点分隔符和无千位分隔符的格式

如果我不想把它作为一个班轮,我不会是我自己,但是我一直没能找到这样的解决方案。

我现在所拥有的解决方法是。

DATA: l_value TYPE p LENGTH 9 DECIMALS 2 VALUE '-3450354.25'. 

DATA(l_formatted_value) = |{ l_value SIGN = LEFTSPACE COUNTRY = 'DE ' }|. 
REPLACE ALL OCCURENCES OF '.' IN l_formatted_value WITH ''. 
WRITE: l_formatted_value. 

我试着用NUMBER = RAW选项来做到这一点,但似乎然后我还没有找到一个简单的方法来指定小数点分隔符为逗号。

DATA(l_formatted_value) = |{ l_value SIGN = LEFTSPACE NUMBER = RAW }|. 
REPLACE '.' IN l_formatted_value WITH ','. 

我该如何实现它作为一个班轮?我想避免使用WRITE

回答

4

不错的挑战,这里是一个单线程,我发现它适用于您的数据定义。我试图使它具有通用的任意数量的小数,但结果相当困难。请注意,它不会总是在小数点后面显示两位数字,例如12.50将显示为12,5。

|{ trunc(l_value) },{ trunc(frac(l_value) * 100 ) }| 

我很好奇别人的发现。

+0

不错的解决方案。只有一句话,你需要在小数部分加上'abs'函数,否则在逗号之后会出现负数的'-'。为了在末尾得到零,我将它改为'| {trunc(l_value)},{abs(trunc(frac(l_value)* 100))WIDTH = 2 PAD ='0'} |'。我将只需要逗号后的两个地方,但我想'WIDTH'选项可以被参数化。 – Jagger

+0

ABS的好处,我曾经在那里,因为你原来的价值是负面的。不知道你添加的格式,发现了很多新东西。 –

+0

嗨,这是什么ABAP版本?我无法编译代码。 –

相关问题