开发者

FLEX XMLDecoder turns `09.00` to "09.00", but `10.00` to 10

开发者 https://www.devze.com 2023-03-09 07:43 出处:网络
Could someone explain why the FLEX 4.5 XMLDecoder does this to my XML-data? var decoder:XMLDecoder = new XMLDecoder;

Could someone explain why the FLEX 4.5 XMLDecoder does this to my XML-data?

var decoder:XMLDecoder = new XMLDecoder;
var $object:Object开发者_Go百科 = 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?)


The Flex deserializer also gave me issues with this. It may be interpreting them as Number objects and thus they will return short representations when toString() is called.

Try using .toFixed(2) whenever you need to print a value such as 11.00

var $object:Object = decoder.decode( <xmltag>11.00</xmltag> );
trace($object); //11
trace($object.toFixed(2)); //11.00


So, to the answer the original question of why this is happening:

In the source code for SimpleXMLDecoder (which I'm guessing has similar functionality to XMLDecoder), there's a comment in the function 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

numbers that start with 0 are left as strings - I guess they thought of phone numbers but not decimals.

Also, because of some hacky implicit casting, you actually have three different types -

  • "0.800" : String
  • 11 : int
  • 11.3: Number
0

精彩评论

暂无评论...
验证码 换一张
取 消