我正在从flex向我的php后端发送一个POST,而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>
没关系,但是当我通过
访问我的flex返回处理程序中的解析XML字段时var o:Object = event.result.rs.configuration;
我看到(通过使用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”。我原以为如果“90.0”在XML中并且使用通用对象来访问它,我会看到一个字符串保持90.0(为了它的价值,它也作为TINYTEXT存储在MySQL中,但我不知道看看为什么在XML输出的情况下这应该是重要的)。 90.1和90.18回到90.1和90.18。
我已经知道我可以像对待字符串一样对待它,找一个'。',如果不存在,则将“.0”连接到它,以便我的编辑表单显示我想要的内容。但是什么是比我更聪明的实体决定我的90.0字符串应该存储为90,我该如何告诉它将其删除?
2016/4/21更新
在从Atriace响应中进行一些搜索/猜测之后,我尝试使用更原子化的XML解析,
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.threshhold保持“90”。我尝试了一些变化,同样的事情。很高兴看到event.message.body有90.0,如果某些东西停止决定我希望它变成一个数字而不是一个字符串,它会更好。
答案 0 :(得分: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"
请注意,只有当您将String
转换为Number
时,才会发生这种情况,这正是您在上面明确做的事情。不过,你说这种情况正在发生,并且会自动发生#34;当您的解析器加载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);
}
此负载的结果&amp;创建操作如下:
正如您所看到的,&#34; 90.0&#34;仍然存在并存储为String
。这应该是在UI(对于客户)中使用字符串的简单问题,并且当您想要对结果运行计算时,将值转换为Number
。
我要看看你的解析器。它看起来比你想做的更多。