String 如何格式化数字以显示至少n个小数
是否有一种简单的方法来格式化一个数字,以显示至少n小数?如果可能,使用字符串模板并避免使用代码处理字符串 2个通缉小数的预期结果: 价值(f类) 预期产量 4. 4 0.4 0.40 0.04 0.04 0.004 0.004 0.0004 0.0004String 如何格式化数字以显示至少n个小数,string,decimal,abap,String,Decimal,Abap,是否有一种简单的方法来格式化一个数字,以显示至少n小数?如果可能,使用字符串模板并避免使用代码处理字符串 2个通缉小数的预期结果: 价值(f类) 预期产量 4. 4 0.4 0.40 0.04 0.04 0.004 0.004 0.0004 0.0004 我不太确定单用字符串模板就可以实现这一点,因为您的需求非常特殊。但是,如果在字符串模板中指定小数位数,则可以使用正则表达式截断尾随的零: DATA numbers TYPE STANDARD TABLE OF f. numbers = VALU
我不太确定单用字符串模板就可以实现这一点,因为您的需求非常特殊。但是,如果在字符串模板中指定小数位数,则可以使用正则表达式截断尾随的零:
DATA numbers TYPE STANDARD TABLE OF f.
numbers = VALUE #(
( 4 / 1 )
( 4 / 10 )
( 4 / 100 )
( 4 / 1000 )
( 4 / 10000 )
).
LOOP AT numbers INTO DATA(number).
DATA(formatted) = replace(
val = |{ number DECIMALS = 4 }|
regex = '0{1,2}\z'
with = ''
).
WRITE formatted. NEW-LINE.
ENDLOOP.
一些评论:
- 匹配字符串的结尾
是基于示例的任意选择,您可能希望在那里选择一个较大的数字,然后调整正则表达式以匹配DECIMALS=4
00{1,N-2}
- 在一个非常新的系统中,您可能想看看新的
|{ <number> DECIMALS = COND #( WHEN <number> >= '0.01' THEN 2 ELSE strlen( substring_after( val = CONV string( <number> ) sub = '.' ) ) ) }|.
{DECIMALS=COND#(当>='0.01'时,然后是2个ELSE strlen(在(val=CONV string()sub='))之后的子字符串)}。
此处的小数位数是根据输入的数字动态计算的
DATA: decimal TYPE TABLE OF decfloat16.
APPEND 4 TO decimal.
APPEND '0.4' TO decimal.
APPEND '0.04' TO decimal.
APPEND '0.004' TO decimal.
APPEND '0.0004' TO decimal.
LOOP AT decimal ASSIGNING FIELD-SYMBOL(<dec>).
WRITE |{ <dec> DECIMALS = COND #( WHEN <dec> >= '0.01' THEN 2 ELSE strlen( substring_after( val = CONV string( <dec> ) sub = '.' ) ) ) }|.
ENDLOOP.
数据:十进制类型的decfloat16表。
在小数点后加上4。
将“0.4”追加到十进制。
将“0.04”追加到小数点后。
将“0.004”追加到小数点后。
将“0.0004”追加到小数点后。
在十进制赋值字段-SYMBOL()处循环。
写|{DECIMALS=COND#(当>='0.01'时,然后写2个ELSE strlen(在(val=CONV string()sub='.'))之后的子字符串)}。
结束循环。
优雅的解决方案,谢谢。