为什么Actionscript对象要转换php返回的XML输出中的数字字符串?

为什么Actionscript对象要转换php返回的XML输出中的数字字符串?,php,xml,actionscript-3,apache-flex,mxml,Php,Xml,Actionscript 3,Apache Flex,Mxml,我正在从flex向我的php后端发送一篇帖子,php代码正在返回此帖子: <?xml version="1.0" encoding="utf-8"> <rs> <action>getConfiguration</action> <num>1</num> <configuration> <armed>1</armed> <threshold>90.0&

我正在从flex向我的php后端发送一篇帖子,php代码正在返回此帖子:

<?xml version="1.0" encoding="utf-8">
<rs>
  <action>getConfiguration</action>
  <num>1</num>
  <configuration>
    <armed>1</armed>
    <threshold>90.0</threshold>
  </configuration>
</rs>
通过使用FlashDevelop,我看到o.threshold是“90”,而不是“90.0”

我需要“90.0”。为什么会发生这种转换,我如何阻止它

感谢您的阅读,以及您能提供的任何见解


2016年4月20日更新:

谢谢大家的第一波评论,我很感激。我不想修改小数点,它可能超过1位(例如90.25),但我不想要“90.00”。我不需要对它做任何计算,这是在不同的设备上完成的,但我需要的是.0而不是像90这样的数字

90.0是一个要编辑的表单,我希望它是一个字符串。我继续尝试这些:

// fails
var num:Number = Number(event.result.rs.configuration.threshold);
var num2:Number = Number(o.threshold);
var num3:String = Number(o.threshold).toString();
var num4:String = String(o.threshold).toString();

// works
var num5:String = Number(o.threshold).toFixed(1).toString();
Number()没有发生什么神奇的事情,这是意料之中的,因为检查对象显示它持有“90”。如果XML中有“90.0”,并且使用一个通用对象来访问它,我会看到一个包含90.0的字符串(值得一提的是,它也存储在MySQL中,作为TINYTEXT,但我不明白这在XML输出中有什么关系)。90.1和90.18返回为90.1和90.18

我已经知道我可以将其视为字符串,查找“.”,如果不存在,则将“.0”连接到它,以便我的编辑表单显示我希望它显示的内容。但是,比我聪明的实体决定将我的90.0字符串存储为90是什么,我如何告诉它将其删除


2016年4月21日更新

在从Atriace响应中进行了一些搜索/猜测构建之后,我尝试使用

    var dataX:String = new XML(event.message.body).toXMLString();
    var xmlDoc:XMLDocument = new XMLDocument(dataX);
    var decode:SimpleXMLDecoder = new SimpleXMLDecoder(true);
    var resultObj:Object = decode.decodeXML(xmlDoc);

而且,我仍然看到resultObj.rs.configuration.threshold保持“90”。我也尝试了一些变化,同样的事情。很高兴看到event.message.body拥有90.0,如果有什么东西不再决定我想要它变成一个数字而不是一个字符串,那就更好了。

尽管难以接受,字符串的所有数字表示都将解析到最近的相关非零小数点。因此

var a:Number = Number("90.010"); // 90.01
var b:Number = Number("90.000"); // 90
var c:Number = Number("00.100"); // 0.1
var x:String = Number("90.000").toFixed(1); // "90.0"
请注意,只有当您将
字符串
转换为
数字
时,才会发生这种情况,这是您在上面明确执行的操作。尽管如此,当解析器加载XML时,您说这是“自动”发生的;这令人不安。注意:

var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, readXML);
urlLoader.load(new URLRequest("configuration.xml"));

function readXML(e:Event):void {
    var datum:XML = new XML(e.currentTarget.data);
}
此加载和创建操作的结果如下:

如您所见,“90.0”仍然存在,并存储为
字符串。然后,只需在UI中使用字符串(针对客户),并在希望对结果进行计算时将值转换为
数字


我想看看你的解析器。它似乎比您想要的做得更多。

尽管难以接受,字符串的所有数字表示都将解析为最接近的相关非零小数点。因此

var a:Number = Number("90.010"); // 90.01
var b:Number = Number("90.000"); // 90
var c:Number = Number("00.100"); // 0.1
var x:String = Number("90.000").toFixed(1); // "90.0"
请注意,只有当您将
字符串
转换为
数字
时,才会发生这种情况,这是您在上面明确执行的操作。尽管如此,当解析器加载XML时,您说这是“自动”发生的;这令人不安。注意:

var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, readXML);
urlLoader.load(new URLRequest("configuration.xml"));

function readXML(e:Event):void {
    var datum:XML = new XML(e.currentTarget.data);
}
此加载和创建操作的结果如下:

如您所见,“90.0”仍然存在,并存储为
字符串。然后,只需在UI中使用字符串(针对客户),并在希望对结果进行计算时将值转换为
数字


我想看看你的解析器。它似乎做的比您想要的要多。

如果您使用
var n:Number=Number(event.result.rs.configuration)会发生什么这是90.0吗?您的第一个建议不起作用,因为
event.result.rs.configuration
?@VC.One
不是一个数字,而是一个通用对象。建议:
var treshhold:Number=Number(event.result.rs.configuration.treshhold)或者,因为您需要它作为“90.0”,所以您可能希望将它保留为string:treshhold:string=Number(event.result.rs.configuration.treshhold);另一种方法是将其保留为数字(如果您需要它进行计算),并且仅通过使用NumberFormatter@DodgerThud,谢谢你的关注。实际上,尽管提问者的问题只是一个取整问题。该
o.threshold
条目没有问题。它实际上是90.0@TreSekw考虑<代码> var num:数字=数(O.ListHHOLD)。代码>。总之,
toFixed(n)
是您的解决方案,其中n是您所需的小数位数。谢谢大家。我回复了所有人,但是有点长,所以我更新了我的问题这是90.0吗?您的第一个建议不起作用,因为
event.result.rs.configuration
?@VC.One
不是一个数字,而是一个通用对象。建议:
var treshhold:Number=Number(event.result.rs.configuration.treshhold)或者,因为您需要它作为“90.0”,所以您可能希望将它保留为string:treshhold:string=Number(event.result.rs.configuration.treshhold);另一种方法是将其保留为数字(如果您需要它进行计算),并且仅通过使用NumberFormatter@DodgerThud,谢谢你的关注。实际上,尽管提问者的问题只是一个取整问题。该
o.threshold
条目没有问题。它实际上是90.0@TreSekw考虑<代码> var num:数字=数(O.ListHHOLD)。代码>。总之,
toFixed(n)
是您的解决方案,其中n是您所需的小数位数。谢谢大家。我回复了所有人,但是有点长,所以我更新了我的问题。忽略第一次更新,我使用