在JS中将OData V2 Edm.Decimal值转换为与语言环境相关的十进制数

问题描述

我正在尝试转换一个字符串数字并将其显示为十进制数字。 例如:"3125000.000"3,125,000.00

在XML中,我写道:

<Text xmlns="sap.m"
  id="text13"
  text="{
    path: 'Amount',type: 'sap.ui.model.odata.type.Decimal',constraints: {
      scale: 2
    }
  }"
/>

效果很好。如何从Controller.js显示该值?

转换后的值是 string 还是 number 类型都没有关系。我只想用逗号和.00显示该值。

解决方法

与XML变体类似,可以在JS中使用数据类型绑定属性,方法是将类型分配给type,但是将设置传递给constructor函数:

原始类型Edm.Decimal的构造函数。
new sap.ui.model.odata.type.Decimal(oFormatOptions?,oConstraints?)

new Text({
  text: {
    path: "Amount",type: new ODataDecimalType({ // required from "sap/ui/model/odata/type/Decimal"
      // Optional format options: ...
    },{
      // Optional constraints:
      scale: 2
    }),}
});

这是一个演示:

sap.ui.getCore().attachInit(() => sap.ui.require([
  "sap/m/Title","sap/ui/model/odata/type/Decimal",],(Title,ODataTypeDecimal) => new Title({
  text: {
    value: "3125000.000",// sample OData decimal value from the model
    type: new ODataTypeDecimal({},{ scale: 2 }),},titleStyle: "H1",}).addStyleClass("sapUiTinyMargin").placeAt("content")));
<script id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core,sap.m"
  data-sap-ui-theme="sap_fiori_3_dark"
  data-sap-ui-async="true"
  data-sap-ui-compatversion="edge"
  data-sap-ui-xx-waitfortheme="init"
></script><body id="content" class="sapUiBody"></body>


还可以在属性绑定之外单独使用数据类型:

// ODataDecimalType required from "sap/ui/model/odata/type/Decimal"
const myType = new ODataDecimalType({},{ scale: 2 });
myType.formatValue("3125000.000","string") // returns: "3,125,000.00"

API reference: sap.ui.model.odata.type.Decimal

如果用户当前的语言环境例如de-DE,则返回值为"3.125.000,00"


注意:框架会根据用户在其浏览器设置中的偏好自动检测区域设置(请参见 Identifying the Language Code / Locale )。除非绝对需要,否则我建议对其进行硬编码。

,

我认为this documentation回答了您的问题(如果我正确理解的话)

摘自文档:

var oFormatOptions = {
  minIntegerDigits: 3,maxIntegerDigits: 5,minFractionDigits: 2,maxFractionDigits: 4
};

// NumberFormat required from "sap/ui/core/format/NumberFormat"
var oFloatFormat = NumberFormat.getFloatInstance(oFormatOptions);
oFloatFormat.format(1.1); // returns 001.10
oFloatFormat.format(1234.567); // returns 1,234.567