我遇到了与不同语言的小数位数字格式相关的问题。
对于CURRENCY控件,系统根据来自URL参数的语言采用正确的格式; US and DE
?sap-ui-language=DE
或?sap-ui-language=US
对于具有type=Number
属性的输入字段,无论语言设置如何,始终使用DOT作为小数分隔符。
有这个问题的解决方案吗?
我有一个动态的sap.ui.table填充(对于行和列),有些行有数字字段,有些行作为文本字段,所以我从后端动态发送dataformat,如下所示;
temp = new sap.m.Input(sColumnId + index,{ value:"{path: '" + sColumnId + "'}" , type:"{DATATYPE}", textAlign:"Right", liveChange:[handle_livechange,this], change:[handle_change, this] , editable:"{path:'EDITABLE', type:'sap.ui.model.odata.type.String'}" }
由于某些行是基于文本的,我不能硬编码格式化程序,如下所示;
type:'sap.ui.model.type.Float', formatOptions : { groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2}}"
我尝试了自定义格式化程序但不知何故在动态表格中找不到我的格式化程序功能。 我尝试使用onChange方法动态格式化,但在这种情况下我的javascript计算无效。
如果我可以根据带有表达式绑定的行值来控制格式化选项,它也会解决我的问题,但下面的代码不起作用。
temp = new sap.m.Input(sColumnId + index,{ value:"{path: '" + sColumnId + ", =${DATATYPE} === 'Number' ? type:'sap.ui.model.type.Float', formatOptions : { groupingEnabled: true, groupingSeparator: '.', decimalSeparator : ',', minFractionDigits: 2} : type:'sap.ui.model.type.String' }"
答案 0 :(得分:2)
这种方法对我有用: 根据语言环境定义格式,例如, 在格式化程序文件中:
sap.ui.define([
"sap/ui/core/format/NumberFormat"
], function (NumberFormat) {
var oFloatNumberFormat = NumberFormat.getFloatInstance({
maxFractionDigits: 2,
minFractionDigits : 2,
groupingEnabled: true
} , sap.ui.getCore().getConfiguration().getLocale());
}
return {
floatFormat: function(value){
return oFloatNumberFormat.format(value);
},
}
});
现在你要使用它:
var MyVar= new sap.m.Input({
value: {
path: "..../amount" ,
formatter : function(amount) {
return yourdefinedname.floatFormat(amount);
}
}
});