formatowanie liczb w actionscript, cz.2

Przyjrzawszy się po raz drugi problemowi, popełniłem poniższą metodę, zastępując poprzednią.
Trochę inne podejście, wszystko objaśnione w kodzie. Dla dobra publicznego publikuję:

		/**
		 * metoda formatuje liczbę z dokładnością zadaną przez @resolution,
		 * oddzielając tysiące znakiem z @thouSep a część ułamkową znakiem
		 * z @decPoint. Na końcu dodaje jednostkę @unit
		 * Np.:
		 * Format.Number(123.456, ' zł', 0.1) zwraca '123,5 zł'
		 * Format.Number(123.456, ' zł', 1) zwraca '123 zł'
		 * Format.Number(123.456, ' m', 10) zwraca '120 m'
		 */
		public static function number(
			v:			Number,
			unit:		String = '',
			resolution:	Number = 1,
			decPoint:	String = ',',
			thouSep:	String = ' '
		):String
		{
			var r:		String = '';
			var rDec:	String = '';
			var rInt:	String = '';
			var i:		int;
			var rIntTmp:String;
			var len: 	int;

			v = Math.round(v / resolution) * resolution;
			r = v.toString();
			// pozycja kropki dziesiętnej
			var decPointPos:int = r.lastIndexOf('.');

			// część całkowita
			if(decPointPos > -1)
				rIntTmp	= r.substr(0, decPointPos);
			else
				rIntTmp = r;

			len	= rIntTmp.length;
			// przepisujemy po 3 cyfry, dodając separator
			while(len > 3){
				rInt = thouSep + rIntTmp.substr(len - 3, len) + rInt;
				rIntTmp = rIntTmp.substr(0, len - 3);
				len = rIntTmp.length;
			}
			rInt = rIntTmp + rInt;

			// część ułamkowa
			if(resolution < 1) {
				// liczba znaków w części ułamkowej powinna być taka jak długość części ułamkowej @resolution
				var decLength = (resolution - Math.floor(resolution)).toString().length - 2;
				// część ułamkowa
				if(decPointPos > -1){
					var x:int = decPointPos + 1 + decLength;
					rDec = r.substring(decPointPos + 1, decPointPos + 1 + decLength);
				}
				// dodajemy zera na końcu, jeśli trzeba
				var zerosCount:int = decLength - rDec.length;
				for(i = 0; i < zerosCount; i++) rDec += '0';
				rDec = decPoint + rDec;
			}
			r = rInt + rDec + unit;
			return r;
		}

pomiń operacje obrysowywania a funkcja trace()

Nie działa. Nie działa! trace(“dupa”). Debug chodzi, kod jest OK, ale trace() nie działa. Czemu? Ano temu, że w ustawieniach publikowania zaznaczyłem lekkomyślnie checkbox “pomiń operacje obrysowywania”. Co to są operacje obrysowywania? Nie wiem, ale nie potrzebowałem ich, więc głupi wyłączyłem. Szkoda tylko, że pod tym zagadkowym napisem kryje się angielskie “omit trace actions” (cytuję z głowy). Ktoś sprawdzał te tłumaczenia? :)) W każdym razie – aby trace() działało, opcja musi być wyłączona. Nie chcę myśleć, dlaczego przetłumaczone na polski wersje programów Adobe są aż tyle droższe od amerykańskich.

wyrażenia regularne w AS3 i HTML

Przy okazji obsługi tekstu wielokolumnowego ze stylami CSS i automatycznym dzieleniem na strony i ramki tekstowe pojawił się problem HTMLa. Kiedy tekst przelewa się z jednej ramki (TextField) do drugiej, trzeba obsłużyć zamykanie tagów na końcu pierwszej ramki i otwieranie ich na początku drugiej. Ponieważ praca jest w trakcie, to na razie tylko tyle, że znalazłem stronę do testowania wyrażeń w AS3, zrobioną we fleksie.

A wyrażenia, jakimi zbieram z tekstu otwierające i zamykające tagi:

openTag     = /<\s*(\w+)([^>]*[^/])?>/gi;
closeTag    = /</(\w+)\s*>/gi;

« Previous PageNext Page »