SAP Gateway OData V4 里的 Edm.Decimal 到底该怎么定义,彻底理解 DECFLOAT、Precision 与 floating Scale
做 SAP Gateway Foundation 的 OData V4 开发时,有一类问题平时不太显眼,一旦碰到金额、汇率、科学计算结果、统计指标或者高精度计量值,就很容易进入视野,那就是Edm.Decimal的Precision和Scale到底应该如何设置。尤其当后台字段使用DECFLOAT16或DECFLOAT34时,情况和传统的DEC、CURR、QUAN、ABAPTYPE p并不完全一样。很多项目里的直觉是,小数类型总应该能够写成类似Precision=15、Scale=2这种模式。金额保留两位小数,数量保留三位小数,这种思维很自然。但DECFLOAT16和DECFLOAT34属于十进制浮点数,它们描述数字的方式并不是固定地规定小数点右侧永远保留多少位,而是通过有效数字和十进制指数共同表达数值。因此,SAP Gateway Foundation 在把 ABAP 的DECFLOAT16、DECFLOAT34映射到 OData V4 的Edm.Decimal时,需要解决一个关键问题,OData Metadata 中的Scale究竟应该写成多少。SAP 给出的答案就是floating。