当前位置: 首页 > Web前端 > JavaScript

SAPUI5货币金额显示的格式化逻辑

时间:2023-03-26 20:20:31 JavaScript

先看一些实际例子:varoFormat=NumberFormat.getCurrencyInstance({"currencyCode":false,"customCurrencies":{"BTC":{"symbol":"\u0243","小数":3}}});oFormat.format(123.4567,"BTC");//"?123.457"上面的例子定义了一个名为BTC的自定义货币符号,并使用decimals来指定后面的小数点位数,以及货币符号的unicode编码值。结果如下:又如:varoFormat=NumberFormat.getCurrencyInstance({"currencyCode":false,"customCurrencies":{"MyDollar":{"isoCode":"USD","decimals":3},"Bitcoin":{"decimals":2}}});//从全局配置中查找的符号oFormat.format(123.4567,"MyDollar");//"$123.457"//没有可用的符号,自定义货币键是renderedoFormat.format(777.888,"Bitcoin");//"Bitcoin777.89"让我们逐步了解格式化函数的工作原理。进入Currency.js的formatValue方法。输入参数为87.2和EUR:目标类型为string,所以进入casestring分支:*/Currency.prototype.formatValue=function(vValue,sTargetType){varaValues=vValue;if(vValue==undefined||vValue==null){返回null;}if(this.oInputFormat){aValues=this.oInputFormat.parse(vValue);}if(!Array.isArray(aValues)){thrownewFormatException("无法格式化货币:"+vValue+"格式错误");}if((aValues[0]==undefined||aValues[0]==null)&&this.bShowNumber){returnnull;}switch(this.getPrimitiveType(sTargetType)){case"string":returnthis.oOutputFormat.format(aValues);默认值:抛出新的FormatException(“不知道如何将货币格式化为”+sTargetType);}};读取EUR对应的数字:所有格式都存储在LocaleData中:未找到转到EUR:对应的数字值,然后读取默认配置。如果默认配置也为空,则返回默认值2。这里维护默认值:2这里将87和2用小数点分开,分别放在不同的变量中,分别存储在:iDotPos=sNumber.indexOf("”);如果(iDotPos>-1){sIntegerPart=sNumber.substr(0,iDotPos);sFractionPart=sNumber.substr(iDotPos+1);}else{sIntegerPart=sNumber;}最终格式化结果:87.20再看一个例子:9.99999EUR这里preserveDecimals的值为true,所以9.99999小数点后的5个9会被保留。如果我们将preserveDecimals的值改为false,最后显示的值将向上取整为10.00:更多Jerry的原创文章在这里:“王子熙”: