我需要编写一个方法,在actionscript中将模式作为参数之一进行数值格式化。
例如:
a. 12345.00 using format pattern ###,###.## resulting 12,345.00
b. 12345.00 using format pattern ##,##,##.## resulting 1,23,45.00
最初,我认为NumberFormatter能够做到这一点,但在阅读documentation后,您似乎无法接受模式。
知道如何实现这个吗?我正在使用Flex 4.1
更新:我根据杰森创建的样本制作了一个高级格式化程序。您可以在此处下载:link
答案 0 :(得分:1)
PhoneFormatter似乎与你要求的东西很接近:
标签继承 它的所有标签属性 超类,并添加以下标记 属性:
<mx:PhoneFormatter
areaCode="-1"
areaCodeFormat="(###)"
formatString="(###) ###-####"
validPatternChars="+()#-. " />
所以也许你可以用它来管理。
这个问题似乎也很相关:Flex Number Format因为它演示了如何实现上面提到的格式,虽然没有格式字符串(这真的是一个严格的要求吗?)
答案 1 :(得分:1)
<强>更新强> 在对这个自定义格式化程序类进行了一些思考之后,我决定稍微更新一下。您可以看到the updated CustomPatternFormatter class here。
更新的课程添加:
我希望这有帮助!
原始回答:
您必须创建自定义Formatter来处理此问题。这是我快速拼凑的东西。您可能需要根据自己的情况进行调整。
<强> CustomNumericFormatter.as 强>
package
{
// formatters/myFormatter/SimpleFormatter.as
import mx.formatters.Formatter;
import mx.formatters.SwitchSymbolFormatter;
public class CustomNumericFormatter extends Formatter
{
private static const VALID_PATTERN_CHARS:String = "#,.";
// Declare the variable to hold the pattern string.
public var formatString:String = "";
// Constructor
public function CustomNumericFormatter() {
// Call base class constructor.
super();
}
// Override format().
override public function format(value:Object):String {
if (error)
error = null;
// If value is null, or empty String just return ""
// but treat it as an error for consistency.
// Users will ignore it anyway.
if (!value || (value is String && value == ""))
{
error = "0 Length String";
return "";
}
// -- value --
// 1. Validate value - must be a nonzero length string.
if (!value || String(value).length == 0 || isNaN(Number(value)))
{
error = "Invalid object type passed to formatter";
return "";
}
// 2. If the value is valid, format the string.
var fStrLen:int = 0;
var letter:String;
var n:int;
var i:int;
var v:int;
// Make sure the formatString is valid.
n = formatString.length;
for (i = 0; i < n; i++)
{
letter = formatString.charAt(i);
if (letter == "#")
{
fStrLen++;
}
else if (VALID_PATTERN_CHARS.indexOf(letter) == -1)
{
error = "You can only use the following symbols in the formatString: # , .";
return "";
}
}
var returnString:String = "";
var vStr:String = String(value).replace(".", "").split("").reverse().join("");
var fStr:Array = formatString.split("").reverse();
var fChar:String;
for (v = 0; v < vStr.length; v++)
{
if (fStr.length > 0)
{
do
{
fChar = fStr.shift();
if (fChar != "#")
returnString += fChar;
} while (fChar != "#" && fStr.length > 0);
}
returnString += vStr.charAt(v);
}
return returnString.split("").reverse().join("");
}
}
}