2011-03-02 3 views
2

Formatted 값에 선행 0, 후행 0 및 소수 2 자리가 포함되도록 NumberFormatter 객체에 속성을 할당했습니다.ActionScript - NumberFormatter로 0을 포맷 하시겠습니까?

서식이 지정된 숫자가 0이 아니면 서식이 적용됩니다. 0이 0.00이되도록 0으로 설정된 속성으로 서식을 지정할 수 있습니까?

var numFormat:NumberFormatter = new NumberFormatter(LocaleID.DEFAULT); 
numFormat.leadingZero = true; 
numFormat.trailingZeros = true; 
numFormat.fractionalDigits = 2; 

trace(numFormat.formatNumber(46));  //46.00 
trace(numFormat.formatNumber(0.556849)); //0.56 
trace(numFormat.formatNumber(0));  //0 

포맷 번호가 0 인 경우 i가 수동 fractionalDigits 원하는 번호 로케일 소수 구분을 추가함으로써이 문제를 해결할 한 [EDIT]

if (myFormattedNumber.text == "0" && numFormat.fractionalDigits) 
    { 
    myFormattedNumber.appendText(numFormat.decimalSeparator); 

    for (var i:uint = 0; i < numFormat.fractionalDigits; i++) 
     myFormattedNumber.appendText("0"); 
    } 

I 이것이 버그인지 기능인지 알기에는 여전히 관심이 있지만, 그것은 나에게 보이지 않는 것처럼 보입니다.

답변

1

그것은 섹시 아니지만, 이것이 내가 유사한 문제로 실행했을 때 내가 사용하는 것과 유사했다 :

function numberFormat(number:*, maxDecimals:int = 2, forceDecimals:Boolean = false, siStyle:Boolean = true):String 
{ 
    var i:int = 0, inc:Number = Math.pow(10, maxDecimals), str:String = String(Math.round(inc * Number(number))/inc); 
    var hasSep:Boolean = str.indexOf(".") == -1, sep:int = hasSep ? str.length : str.indexOf("."); 
    var ret:String = (hasSep && !forceDecimals ? "" : (siStyle ? "," : ".")) + str.substr(sep+1); 
    if (forceDecimals) for (var j:int = 0; j <= maxDecimals - (str.length - (hasSep ? sep-1 : sep)); j++) ret += "0"; 
    while (i + 3 < (str.substr(0, 1) == "-" ? sep-1 : sep)) ret = (siStyle ? "." : ",") + str.substr(sep - (i += 3), 3) + ret; 
    return str.substr(0, sep - i) + ret; 
} 


trace("zero: " + numberFormat(0, 2, true, false)) 

Full article here

+1

코드가 무섭다. 롤. 리턴 된 문자열에 ".00"을 단순히 추가하는 것만으로도됩니다. 이것이 NumberFormatter 클래스의 버그 인 것 같습니다. formatter에 전달 된 값이 0이면 formatNumber(), formatInt() 및 formatUint()가 모두 "0"을 반환합니다. – TheDarkIn1978

+0

하하, 확실히 섹시하지 않습니다. 그것은 통화 서식, 특히 미국 이외의 서식에 사용되었습니다. – TNC

+0

'.00'을 붙이기 만해도 일부 설정을 변경하면 원하는대로 수행되지 않을 수 있습니다. 또한 0은 Flash Player 11에서 0.00을 반환하므로 아무 것도하지 않아도됩니다. –

1

방법에 대한 Number(value).toFixed(2)?

+0

NumberFormatter를 사용하는 것은 간단하지 않습니다. 숫자는 특정 로케일에 맞게 형식이 지정됩니다. 예를 들어, 북아메리카에서는 위의 속성을 사용하는 NumberFormatter를 사용하는 숫자 5,000을 "5,000.00"으로 변환하는 반면 유럽에서는 "5.000,00"(구분 기호를주의하십시오) 일 수 있습니다. – TheDarkIn1978