2011-05-31 188 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:數