首页 > 编程语言 >SAP程序属性中的固定点算术Fixed point arithmetic的控制作用

SAP程序属性中的固定点算术Fixed point arithmetic的控制作用

时间:2023-04-20 17:12:53浏览次数:55  
标签:SAP 运算 NUM2 point NUM1 小数点 LV Fixed PACK

  SAP程序创建时,程序属性面板中有一个选项叫做“固定点算术”,默认是勾上的,如下图所示:

  通过按F1在该选上调取帮助说明,可以看到官方是这样解释的:
  • 如果标记该复选框,该程序中的所有计算都将使用定点运算。
  • 如果未标记,那么当在分配、比较和计算中使用压缩数字,与定义的小数位无关时,就把压缩数字(ABAP/4 类型 P、字典类型 CURR、DEC 或 QUAN )作为正数。也将把算法计算中的中间结果取整到下一整数。只有当使用 WRITE 报表输出该答复时,才考虑该小数位数量。
  这段机翻的说明读起来是相当费解的,简单来说就是这样的:   如果勾选固定算术,则在程序中所有的运算都是基于真实值进行运行,无需特殊处理;   如果不勾选固定算术,则在程序中,压缩类型的数值类型(比如P、CURR、QUAN)都变量都会先视为不带小数点的正整数,来进行运算、比较或者分配,处理完毕后,使用write类型输出的时候,系统会对运算结果再补上数据类型对应的小数点,超出小数点位数的,按照四舍五入的原则舍弃多余的小数位。   详见下方测试代码(程序属性设置为非固定点算术):
DATA: LV_PACK_NUM1 TYPE P DECIMALS 3,    "压缩数据1
      LV_PACK_NUM2 TYPE P DECIMALS 3,    "压缩数据2
      LV_FACTOR1 TYPE I,                 "除数1
      LV_FACTOR2 TYPE I.                 "除数2

LV_PACK_NUM1 = '12345.6'.
LV_PACK_NUM2 = '12345.6'.
LV_FACTOR1 = 100.
LV_FACTOR2 = 1000.

LV_PACK_NUM1 = LV_PACK_NUM1 / LV_FACTOR1.
LV_PACK_NUM2 = LV_PACK_NUM2 / LV_FACTOR2.

WRITE:/ LV_PACK_NUM1,/ LV_PACK_NUM2.

  运行结果如下:

  我们分析下运算过程:

  对于LV_PACK_NUM1='12345.6',计算之前,先将数据的小数点移除,变成了 LV_PACK_NUM1='123456',除以100后,变成了1234.56,然后由于LV_PACK_NUM1定义的是三位小数,因此再在结果上补充三位小数,变成了 1.23456,然后根据小数点第四位(为5)进行四舍五入,于是小数点第三位就从4变成了5,要进位,所以最终结果 1.235;而该算式正常运算的话,结果应该是123.456   对于LV_PACK_NUM2='12345.6',计算之前,先将数据的小数点移除,变成了 LV_PACK_NUM2='123456',除以1000后,变成了123.456,然后由于LV_PACK_NUM2定义的是三位小数,因此再在结果上补充三位小数,变成了 0.123456,然后根据小数点第四位(为4)进行四舍五入,于是小数点第三位的3还是3,所以最终结果 0.123;而该算式正常运算的话,结果应该是12.346,   如下对比表
运算式 固定点运算 非固定点运算
常规运算 移除小数点-> 补充小数点-> 四舍五入
12345.6÷100 123.456 123456÷100=1234.56 1.23456 1.235
12345.6÷1000 12.3456 123456÷1000=123.456 0.123456 0.123
    由此可见,一旦 程序采用非固定运算的方式开发,往往会导致计算结果的异常,要解决此问题,需要将运算过程封装成一个采用固定点运算的Funcion来运算,运算完后,传出结果到调用程序中。   常见应用于SD模块中得的一代出口增强中,由于SAP预留的一代出口均包含在模块池程序SAPMV45A中,而这个程序正好是SAP为数不多的采用非固定点运算的方式所开发的标准程序之一,如下图所示:

  因此当我们增强销售订单相关单据后,出现的运算的结果缩小了一定的倍数,皆是因为这个原因所导致。

标签:SAP,运算,NUM2,point,NUM1,小数点,LV,Fixed,PACK
From: https://www.cnblogs.com/zohoo/p/17337504.html

相关文章

  • @Pointcut语法详解
    定义格式:@注解(value=“表达标签(表达式格式)”)如:@Pointcut(value=“execution(*com.cn.spring.aspectj.NotVeryUsefulAspectService.*(…))”)前置后置切面方法,也可以写切面表达式,如果这么表达式都一样,要复用,可以写一个空方法表述为@Pointcut(...),再其他的后置上使用切......
  • k8s中command、args && dockerfile中entrypoint、cmd之间的比较
    k8s中command、args&&dockerfile中entrypoint、cmd之间的比较标签(空格分隔):K8SDockerfile中ENTRYPOINT,CMD的比较ENTRYPOINT的两种格式:ENTRYPOINT["executable","param1","param2"](exec格式,推荐)ENTRYPOINTcommandparam1param2(shell格式)C......
  • 设计并实现平面点类Point
    定义一个平面点类Point,对其重载运算符关系运算符,关系运算以距离坐标原点的远近作为基准,远的为大。程序完成对其的测试。 importmathclassPoint():def__init__(self,x,y):self.x=xself.y=ydef__lt__(self,other):l1=mat......
  • SQL Server Endpoint 与 镜像、AlwaysOn身份验证
    若要加入 AlwaysOn可用性组 或数据库镜像,服务器实例上必须创建自己专用的“数据库镜像端点”(databasemirroringendpoint)。 此端点用途特殊,专门用于接收来自其他实例的连接。数据库镜像端点使用TCP协议在参与数据库镜像会话或承载可用性副本的实例之间发送和接收消息。 数......
  • Centos7开启docker checkpoint
    检查点和还原是一项实验性功能,允许您冻结正在运行的容器,通过检查点将其状态转换为文件集合在磁盘上。稍后,容器可以从冻结点恢复。#docker开启checkpoint:"experimental":true,[root@jenkins~]#cat/etc/docker/daemon.json{"experimental":true,"data-root":......
  • MidpointLine
    #include<graphics.h>#include<math.h>voidMidpointLine(intx0,inty0,intx1,inty1);intmain(void){intgdriver=DETECT,gmode,errorcode;intbkcolor,midx,midy;initgraph(&gdriver,&gmode......
  • SAP OData 开发实战教程:从入门到提高
    @目录SEGW-GatewayServiceBuilder使用RestfulABAPProgramming编程模型(简称RAP)开发OData服务使用SAPCloudApplicationProgramming编程模型开发OData服务详细目录本教程根据笔者在SAP研究院工作多年的实战经验,计划通过300篇以上的文章篇幅,深入介绍SAP三......
  • 通过一个具体的例子,深入了解 SAP UI5 控件数据双向绑定的工作原理和问题排查方法试读
    笔者知识星球里有朋友提问:SAPUI5中的sap.m.select控件,在当前页面做任何操作时,都可以选中key值,但触发dialog之后,可以看到select框内的key值被清空,当关闭dialog后,再去选择key值,无任何反应,请问是select控件的问题还是dialog的问题又或者是odata写法有问题,谢谢!......
  • 关于 Fiori 应用里 SAP UI5 前端开发和 SEGW 后台 OData 服务开发的工作量比值问题
    我的知识星球有朋友向我提问:Jerry您好!请问一个中等复杂度的FioriUI5应用,前端代码用freestyle方式纯自己写,后端用SEGW开发Odata服务,前后端的工作量的比值大概是多少?需考虑调试测试的时间。关于这个问题,首先我们得界定,什么算是一个中等复杂度的Fiori应用?从前台视角来看,......
  • SAP 官方的在线课程网站:Open SAP
    我从2007年大学毕业加入SAP成都研究院,在这个行业工作已经16年了。我第一次听说SAP这个公司的名称,还是SAP到大学开校园宣讲会的时候,所以我也是零基础SAP入门。我从一个SAP菜鸟开始的成长史,可以参考这篇文章:一个SAP开发工程师的成长史个人的感受是,如果英语的阅读能力......