2015-11-03 156 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版本?我無法編譯代碼。 –

相關問題