2020-08-12 16:12发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
我可以知道如何在开放SQL中舍入浮点数吗?
下面的SQL不起作用...请帮助,谢谢!
选择回合((cast(lvar1 as FLTP)/cast(lvar2 as FLTP)),6)...
对于浮点数(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。
用法:
示例:
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)
GK Goh ,现在我已经完全理解了您的问题。 我使用以下信息和编码再次更新了上面的答案,该信息和编码将为您提供帮助。
这就是您要做的:
迈克尔,您好,非常感谢您的出色建议。
不幸的是,我使用的是较旧的SAP ABAP(版本7.50),而针对abap版本7.50的Open SQL不支持SQL DIVISION函数。
https://help.sap.com/doc/ abapdocu_750_index_htm/7.50/zh-CN/abensql_functions_numeric.htm 。
另一方面,也不支持从FLTP到DEC的转换。
https://help.sap.com/doc/ abapdocu_751_index_htm/7.51/zh-cn/abensql_cast.htm
谢谢。
GK Goh ,哦,不。 是的,您目前不走运。 我只需要仔细检查一下,但SQL DIVISION函数可用于7.51+中的Open SQL。 SAP在7.50中"仅"将其引入了ABAP CDS。
并且在任何版本上都根本不支持从FLTP到DEC的转换(<< CAST表达式应与平台无关。不允许将类型从FLTP转换为其他数字类型,因为结果是
所以现在唯一的选择就是等待下一次升级到7.51,或者使用这些功能实现CDS视图,或者在之后的ABAP中实现该逻辑。 您从数据库中选择了"原始"数据。
最多设置5个标签!
对于浮点数(FLTP)类型的值,Open SQL函数回合不可用。
此外,对于Open SQL,整数和整数不能除(运算符'/')。 小数点,但用于浮点数。 但是,FLTP值不能转换为DEC十进制,实际上不能转换为任何其他值类型(<< CAST表达式应与平台无关。不允许将类型从FLTP转换为其他数字类型,因为结果
因此,对于带有小数位的小数,需要使用函数DIVISION代替,这也将处理四舍五入的小数。 (函数DIV仅可用于不带小数位的数字值。)
因此,这是您必须要做的:
更多信息:
自ABAP 7.50+起,就有用于数字值的Open SQL函数,例如舍入函数和除法函数:
< li> https://help.sap.com/doc/abapdocu_750_index_htm/7.50/zh- US/abensql_functions_numeric.htm- https://help.sap.com/doc/abapdocu_750_index_htm/7.50/zh-CN/abensql_arith_func.htm
不过,SQL DIVISION函数仅自7.51以后才可用于Open SQL。
SAP在7.50中"仅"将其引入ABAP CDS。
用法:
expr:INT1,INT2,INT4,INT8,DEC,CURR和QUAN
pos:INT1 ,INT2和INT4
expr1,expr2:INT1,INT2,INT4,INT8,DEC,CURR和QUAN
dec:文字或常量主机 ABAP类型b,s,i,int8的变量大于或等于0且不大于6的最大值和exp2的长度加上exp1的小数位数加1
结果:
示例:
该怎么做:
a)强制转换为DEC(例如38,14或38,7之间的任何值)
将内容投放到FLTP并不会给您带来麻烦 很多选择:
我假设您是出于精度原因进行转换和舍入。 您可能希望在某些时候投入使用,因为涉及到以某种方式截断的数字时,您永远不可能做到100%精确。
您的问题的解决方案是上述DIVISION语句 :
b)在SQL/ABAP内部计算
相反,您可以从以下位置选择值: 数据库作为FLTP,然后在ABAP中执行任何必要的计算。 例如,将其转换为具有所需小数位数的十进制(DEC)或添加另一个小数并使用必要的舍入函数对其进行舍入。
GK Goh ,现在我已经完全理解了您的问题。 我使用以下信息和编码再次更新了上面的答案,该信息和编码将为您提供帮助。
这就是您要做的:
迈克尔,您好,非常感谢您的出色建议。
不幸的是,我使用的是较旧的SAP ABAP(版本7.50),而针对abap版本7.50的Open SQL不支持SQL DIVISION函数。
https://help.sap.com/doc/ abapdocu_750_index_htm/7.50/zh-CN/abensql_functions_numeric.htm 。
另一方面,也不支持从FLTP到DEC的转换。
https://help.sap.com/doc/ abapdocu_751_index_htm/7.51/zh-cn/abensql_cast.htm
谢谢。
GK Goh ,哦,不。 是的,您目前不走运。 我只需要仔细检查一下,但SQL DIVISION函数可用于7.51+中的Open SQL。 SAP在7.50中"仅"将其引入了ABAP CDS。
并且在任何版本上都根本不支持从FLTP到DEC的转换(<< CAST表达式应与平台无关。不允许将类型从FLTP转换为其他数字类型,因为结果是
所以现在唯一的选择就是等待下一次升级到7.51,或者使用这些功能实现CDS视图,或者在之后的ABAP中实现该逻辑。 您从数据库中选择了"原始"数据。
一周热门 更多>