PDA

Просмотр полной версии : Троллинг от NumberFormatter


in4core
19.09.2013, 18:34
public static function getSplittedCurrency(value:String):String
{
var input:Number = Number(value);
var numFormat:NumberFormatter = new NumberFormatter("en_US");
numFormat.decimalSeparator = ".";
numFormat.trailingZeros = false;

var output:String = numFormat.formatNumber(input);

if (output.indexOf(".") != -1 ) output += "0";

output = output.split(",").join(" ");

return output;


}
А троллинг в том, что укажи локаль как ru_RU или DEFAULT. Мы в трейсе видим 1 000 000. В текстовое же поле выводится 1000000 без пробелов, так что пришлось делать очередной танец с бубном. Или я чего то не понимаю?!

Dukobpa3
19.09.2013, 21:02
Не понимаешь.
Форматтер за тебя подумал что тебе там надо, пробелы или зпт, в локали америкосов приянто ставить зпт, в русской пробелы.
Или пиши свой велосипед. Что ты собственно и сделал. Но нафига тогда тебе форматтер я не понимаю.
А локаль можешь получать где-то во флешварах и сюда подставлять чтоб пользователи получали привычный формат чисел.

dimarik
19.09.2013, 21:28
Ради любопытства... А зачем изначально Number-величину, коей является денежка, судя по названию метода, переводить в String, чтобы потом перевести в Number?

in4core
20.09.2013, 12:12
C сервера шлют стринг - и сразу делаем перевод, а выыводим стринг логично почему, чтобы в текстовое поле вписать, в модели хранить данную инфу не надо ( так надо ), поэтому она как графическая часть, можно сказать.

Dukobpa3 - Это ты не понимаешь, я как раз все верно написал
Форматтер за тебя подумал что тебе там надо, пробелы или зпт, Я о том же и твержу! Мне как раз нужны пробелы! Так вот ФОРМАТТЕР в трейс выдает с ПРОБЕЛАМИ, а когда я эту строчку пихаю в ПОЛЕ - то пробелы исчезают! ПОЭТОМУ - ты видишь велосипед, а не потому, что я его придумал от нечего делать!

AlexCooper
20.09.2013, 12:41
Странно, у меня всё ок привожу код и влаживаю свф. Может быть у Вас у текстового поля restrict выставлен?
import flash.text.TextField;

function getSplittedCurrency(value:String,format:String = 'en_US'):String
{
var input:Number = Number(value);
var numFormat:NumberFormatter = new NumberFormatter(format);
numFormat.decimalSeparator = ".";
numFormat.trailingZeros = false;

return numFormat.formatNumber(input);
}

var t:TextField = new TextField();
t.text = getSplittedCurrency("1000");

addChild(t);

t = new TextField();
t.text = getSplittedCurrency("1000",'ru_RU');

t.y = 20;

addChild(t);text.swf

in4core
20.09.2013, 12:45
В том то и прикол, что нет. И если я делаю так, как показал выше, через костыль - то пробелы есть. Как такое может быть вообще?!

AlexCooper
20.09.2013, 12:47
скачайте свф, там всё отлично работает без костылей. Вот только почему то в браузере запятая не отображается, может не подгрузил шрифт или каким-то образом локаль слетает.

in4core
20.09.2013, 14:59
Стоит проверить текстовое поле, может быть какой нибудь автокерн все портит, но опять же как там? Вот делаю проверку 3 символа допустим - выводит в трейс пробел, значит все таки пробел есть - в текстовом поле без пробела выходит, а если самому принудительно пробелы ставить, как написал выше - то все ок, ну чудеса же!

Wolsh
20.09.2013, 15:43
Чудес не бывает.
Например, это может быть не совсем пробел.
Знаете, почему ТАВ обычно 4 знака? Догадайтесь.