FLEX XMLDecoder превращает `09.00` в '09.00', но` 10.00` в 10 - PullRequest
3 голосов
/ 31 мая 2011

Может ли кто-нибудь объяснить, почему XML-декодер FLEX 4.5 делает это с моими XML-данными?

var decoder:XMLDecoder = new XMLDecoder;
var $object:Object = decoder.decode( <xmltag>08.00</xmltag> );
// object = "08.00"

var decoder:XMLDecoder = new XMLDecoder;
var $object:Object = decoder.decode( <xmltag>11.00</xmltag> );
// Object = "11" (HEY! Where did my '.00' part of the string go?)

var decoder:XMLDecoder = new XMLDecoder;
var $object:Object = decoder.decode( <xmltag>11.30</xmltag> );
// Object = "11.3" (HEY! Where did my '0' part of the string go?)

Ответы [ 2 ]

1 голос
/ 08 сентября 2012

Итак, чтобы ответить на оригинальный вопрос , почему это происходит:

В исходном коде для SimpleXMLDecoder (который, как я предполагаю, по функциональности похож на XMLDecoder), есть комментарий в функции simpleType ():

//return the value as a string, a boolean or a number.
//numbers that start with 0 are left as strings
//bForceObject removed since we'll take care of converting to a String or Number object later

числа, начинающиеся с 0, остаются в виде строк - Я думаю, они думали о телефонных номерах, но не о десятичных числах.

Кроме того, из-за какого-то хакерского неявного приведения у вас фактически есть три разных типа -

  • "0,800": строка
  • 11: int
  • 11,3: номер
1 голос
/ 31 мая 2011

Flex deserializer также дал мне проблемы с этим. Он может интерпретировать их как объекты Number и, следовательно, они будут возвращать короткие представления при вызове toString ().

Попробуйте использовать .toFixed(2) всякий раз, когда вам нужно напечатать значение, например 11.00

var $object:Object = decoder.decode( <xmltag>11.00</xmltag> );
trace($object); //11
trace($object.toFixed(2)); //11.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...