致谢:在这些方面我要归功于STACKOVERFLOW中的许多帖子,特别是
在Java中使用Lakh格式而不是百万格式进行数字格式化。
在新的Flex AIR应用程序中,我做了一个很好的创新
右对齐+印度逗号分隔符
这是通过自定义项渲染完成的;需要大量的搜索和代码工作。从Java中改编而来,但Java、C#和AS3是如此相似,移植起来非常容易。
除了印度之外,没有人喜欢"lakhs"和"crores";其他人都喜欢"million"和"billion"。但我们印度人认为lakhs和crores,比较舒服,觉得"million"(一百万)有点困惑。
在此过程中,我还实现了
右对齐,这是一个非常常见的需求。
Flex标记:
<s:GridColumn id="dmbtr" headerText="Amt (INR)" dataField="dmbtr" >
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<s:Label id="MyText" top="9" left="7" alpha="1"
text="{leftPad(data.dmbtr,10)}"
fontFamily="Lucida Console" textAlign="right"/>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
AS3函数
public function leftPad(inp:Number,size:int):String {
var lstr:String=Math.round(inp).toString()
// LAKHS CRORES 印度风格
var pat3:RegExp = /(\d+)(\d{3})$/;
lstr = lstr.replace(pat3, "$1,$2");
var pat2:RegExp = /(\d+)(\d{2},.+)/;
var pat1:RegExp = /\d{3,},.+/;
while(lstr.match(pat1))
lstr = lstr.replace(pat2, "$1,$2");
// 右对齐部分
var strLen:int = lstr.length;
var padLen:int = size - strLen;
if (padLen <= 0)
return lstr;
var myspaces:String=" "; // 20 OK
return myspaces.substring(0,padLen)+lstr;
}
技巧在于左侧填充并使用固定宽度字体
我的要求是最接近卢比
如果需要小数(INR的派斯),请使用Number的toFixed方法,并将pat3更改为
var pat3:RegExp = /(\d+)(\d {3}。*)$ /;
正确对齐部分位于印度逗号之后