将 OData V2 Edm.Decimal 值转换为 JS 中依赖于区域设置的十进制数
Converting OData V2 Edm.Decimal value to a locale-dependent decimal number in JS
我正在尝试转换字符串数字并将其显示为十进制数字。
例如:"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
.
显示该值
我想 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
属性绑定数据类型可以在JS中实现,类似于XML变体,通过将类型赋值给type
但改为在其 constructor 函数中传递设置:
Constructor for a primitive type 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
,return 值将是 "3.125.000,00"
。
注意: 框架会根据用户在浏览器设置中的首选项自动检测语言环境(参见 Identifying the Language Code / Locale ).我不推荐hard-coding它,除非绝对需要它。
我正在尝试转换字符串数字并将其显示为十进制数字。
例如:"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
.
我想 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
属性绑定数据类型可以在JS中实现,类似于XML变体,通过将类型赋值给type
但改为在其 constructor 函数中传递设置:
Constructor for a primitive type
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
,return 值将是 "3.125.000,00"
。
注意: 框架会根据用户在浏览器设置中的首选项自动检测语言环境(参见 Identifying the Language Code / Locale ).我不推荐hard-coding它,除非绝对需要它。