问题描述
||
有人可以解释为什么FLEX 4.5 XMLDecoder对我的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?)
解决方法
Flex解串器也给我带来了问题。可能将它们解释为Number对象,因此在调用toString()时它们将返回简短表示形式。
每当需要打印
11.00
之类的值时,尝试使用.toFixed(2)
var $object:Object = decoder.decode( <xmltag>11.00</xmltag> );
trace($object); //11
trace($object.toFixed(2)); //11.00
, 因此,要回答为什么会这样的原始问题:
在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:数字