• SAP ABAP 基本运算(加减乘除取余 四舍五入 向上下取整) 问题:在使用`DIV`和 `/` 出现的差异以及错误


    问题:在使用DIV/ 出现的差异以及错误

    1.算术运算语句表

    从下表我们可以看出DIV是整除,也就是他得出的结果都是整数,没有精确度;
    /他就是简单的除法运算,含有精确度的.
    在这里插入图片描述

    2.问题剖析

    下面这个l_data(p类型)是我们要计算的结果,ls_umrez-umrez / ls_umrez-umren(dec类型)这个结果业务理论上是不存在为零的情况的,但是bestand-labst(QUAN类型)是有可能存在为零的.

    l_data = bestand-labst / ( ls_umrez-umrez / ls_umrez-umren ).
    l_data = beatand-labst DIV ( ls_umrez-umrez DIV ls_umrez-umren ).
    
    • 1
    • 2

    看下面的短文本就有了然了,我们在来看l_data的数据类型是p,这就不难理解了.
    应为在使用DIV时底层数据会把所要计算的数据类型转换成结果的类型.
    也就是你的计算结果是什么类型,底层就会把你的计算式子中的数据字段装换成什么类型,在进行计算.
    在这里插入图片描述

    3.类型转换

    就是我们在进行数据对象进行赋值的时候就会触发底层的数据类型的转换,这种装换是系统自动的.例如将一个char类型的变量赋值给一个number类型的变量,只有数字字符被赋值,其他则直接被忽略.

    3.1基本类型对象转换原则

    出去DT这两个类型不可以被转换,其他都有相对应的转换规则的.

    3.2引用类型对象和转换原则

    对象应用和数据应用变量是不可以相互赋值的.
    和C++中的指针原理是类似的.
    引用类型对象赋值时只是将其包含的其他对象的地址指针进行传递,其指向的数据对象内容并不会进行任何转换或改变.
    在对象引用变量之间的赋值时,赋值过程和结果会受应用变量的类型和其指向的数据对象的影响,可能存在强制类型转换.

    3.3结构体转换原则

    结构体在赋值时需要确定目标对象是扁平结构纵深结构.
    纵深结构:需要考虑结构体之间完全的兼容性,因为纵深结构不存在任何数据类型转换.
    扁平结构:可以不考虑结构体之间的兼容性

    3.4内表转换原则

    内表与内表之间的赋值时取决于内表的结构的兼容性,与表类型或者主键无关.

    4.解决方案

    我们在上面说过使用DIV会存在数据类型的转换问题,所以我们使用/进行计算.
    我们在使用P类型运算时,如果程序属性中Fixed point arithmetic没有设置,则运算时小说位不会起作用,将按照整型处理.

    1 / 3 * 3 
    
    • 1

    如果没有设置Fixed point arithmetic结果是为 0 的
    因为除法结果被内部取整为 0 ,因此就会出现上面的报错问题; 如果设置了结果就为 1.

    4.1Fixed point arithmetic(固定点算术)

    SE38 选择程序属性把那个勾选主即可
    在这里插入图片描述

    5.四舍五入上下取整

     CALL FUNCTION 'ROUND'
              EXPORTING
                decimals      = 3          " 保留多少位小数
                input         = l_data     "输入数据
                sign          = 'X'        " X 四舍五入 + 向上取舍 - 向下取舍 (负数也一样)
              IMPORTING
                output        = l_data1    " 输出返回结果
              EXCEPTIONS
                input_invalid = 1
                overflow      = 2
                type_invalid  = 3
                OTHERS        = 4.
          ENDIF.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    腾讯云助力港华能源上线“碳汭星云2.0”,推动能源行业绿色低碳转型
    YOLOV8的tensorrt部署详解(目标检测模型-CUDA)
    最详解决:jupyter notebook不会自动打开浏览器问题
    Tensor.scatter_add_函数解释:
    JVM学习第一天
    建造者模式 创建型模式之三
    java线程池
    QQ音乐分享到微信接口
    SaaSBase:UiPath是什么?
    使用 ahooks 中的 useRequest 轻松管理React中的网络请求
  • 原文地址:https://blog.csdn.net/weixin_49198221/article/details/126539071