如何在开放式SQL中舍入浮点数?

2020-08-12 16:12发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我可以知道如何在开放SQ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我可以知道如何在开放SQL中舍入浮点数吗?

下面的SQL不起作用...请帮助,谢谢!

选择回合((cast(lvar1 as FLTP)/cast(lvar2 as FLTP)),6)...

4条回答
2020-08-12 16:38 .采纳回答

对于浮点数(FLTP)类型的值,Open SQL函数回合不可用。

此外,对于Open SQL,整数和整数不能除(运算符'/')。 小数点,但用于浮点数。 但是,FLTP值不能转换为DEC十进制,实际上不能转换为任何其他值类型(<< CAST表达式应与平台无关。不允许将类型从FLTP转换为其他数字类型,因为结果

因此,对于带有小数位的小数,需要使用函数DIVISION代替,这也将处理四舍五入的小数。 (函数DIV仅可用于不带小数位的数字值。)

因此,这是您必须要做的:

 select除法(lvar1,lvar2、6)..  。
 

更多信息:

自ABAP 7.50+起,就有用于数字值的Open SQL函数,例如舍入函数和除法函数:

不过,SQL DIVISION函数仅自7.51以后才可用于Open SQL。
SAP在7.50中"仅"将其引入ABAP CDS。

用法:

  • ROUND(expr,pos)
    expr:INT1,INT2,INT4,INT8,DEC,CURR和QUAN
    pos:INT1 ,INT2和INT4
  • 分区(expr1,expr2,dec)
    expr1,expr2:INT1,INT2,INT4,INT8,DEC,CURR和QUAN
    dec:文字或常量主机 ABAP类型b,s,i,int8的变量大于或等于0且不大于6的最大值和exp2的长度加上exp1的小数位数加1
    结果:

示例:

 SELECT round(zwert,1)AS zwert," CURR 13,2
        round(zmeng,2)AS zmeng," QUAN 13,3
        round(umvkz,-1)AS umvkz," DEC 5,0
        round(stcur,4)AS stcur," DEC 9,5
 " round(posnr,-2)AS posnr" NUMC =>不允许非数字数据类型;)
        round(cast(posnr as DEC(6,0)),-2)AS posnr" NUMC强制转换为DEC
 " round(umref,2)AS umref" FLTP =>不允许数据类型F
 " round(cast(umref as DEC(38,14)),2)AS umref"无法转换FLTP
   从vbap
   到表@DATA(itab)。
 

该怎么做:

a)强制转换为DEC(例如38,14或38,7之间的任何值)

将内容投放到FLTP并不会给您带来麻烦 很多选择:

我假设您是出于精度原因进行转换和舍入。 您可能希望在某些时候投入使用,因为涉及到以某种方式截断的数字时,您永远不可能做到100%精确。

您的问题的解决方案是上述DIVISION语句 :

 select除法(lvar1,lvar2、6)... 

b)在SQL/ABAP内部计算

相反,您可以从以下位置选择值: 数据库作为FLTP,然后在ABAP中执行任何必要的计算。 例如,将其转换为具有所需小数位数的十进制(DEC)或添加另一个小数并使用必要的舍入函数对其进行舍入。

"只是如何"舍入" FLTP的不同示例示例
 vardec6 = varfloat。

 vardec16 = varfloat。
 vardec6 = round(val = vardec16 dec = 6)。

 vardec16 = cl_abap_math => round_f_to_15_decs(float)
 

一周热门 更多>