2011-05-31 104 views
3

有人可以解释为什么FLEX 4.5 XMLDecoder对我的XML数据执行此操作吗?FLEX XMLDecoder将`09.00`转换为“09.00”,但将`10.00`转换为10

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?) 
+0

看起来是试图打字。你是否试图将数据包装在cData标签中? – 2011-05-31 19:21:39

+0

hm,仔细观察调试器......第一个值(08.00)以字符串形式返回。但另外两个(11和11.3)已经被转换为“非”字符串。 – Erik 2011-05-31 19:25:23

+0

不!将字符串包装在cData标签中并没有帮助。 – Erik 2011-05-31 20:05:20

回答

1

Flex解​​串器也给了我这个问题。它可能会将它们解释为Number对象,因此它们将在toString()被调用时返回短表示。

尝试使用.toFixed(2)当你需要打印一个值,如11.00

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

听起来没错。不好的部分是我不是调用XMLDecoder的人。我正在使用Flash Builder从返回xml的HTTPService创建valueObjects。解码器在“结果”堆栈的某个地方被调用,我的valueObjects全部搞乱了。 – Erik 2011-05-31 19:43:30

+0

实际在UI中显示对象时,我使用toFixed()方法。这样,无论内部表示值如何,事情在应用程序中都会一致地显示出来。 – 2011-05-31 20:29:39

+0

这让我有良心良苦的回家。而且我们还会生活在另一天的解码器中。 非常感谢! – Erik 2011-05-31 20:50:01

1

因此,要回答的原来的问题,为什么这种情况正在发生:

source code for 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开头的数字保留为字符串 - 我想他们会想到电话号码,但不是小数。

同时,由于一些hacky implicit casting,你实际上有三种不同类型 -

  • “0.800”:字符串
  • 11:整数
  • 11.3:数