2016-04-20 12 views
1

私はPHPのバックエンドにフレックスからPOSTを送信することだし、PHPのコードは、このバック戻っている:PHPが返すXML出力の数値文字列をActionscriptオブジェクトが変換するのはなぜですか?

<?xml version="1.0" encoding="utf-8"> 
<rs> 
    <action>getConfiguration</action> 
    <num>1</num> 
    <configuration> 
    <armed>1</armed> 
    <threshold>90.0</threshold> 
    </configuration> 
</rs> 

罰金だが、私は

を通じて私のフレックス・リターン・ハンドラ内で解析されたXMLフィールドにアクセスするとき
var o:Object = event.result.rs.configuration; 

私はそのo.thresholdは "90" の代わりに "90.0" である(FlashDevelopのを踏んで)を参照してください。

は、私が "90.0" が必要です。なぜこの変換が行われていますか、どのように停止しますか?

おかげで読書のために、そして任意の洞察力のためにあなたが提供することができます。


2016年4月20日更新:最初の波のための

おかげで、私はそれを感謝し、人々をコメントしています。小数点以下の桁数を修正する必要はありませんでした.1桁以上(たとえば90.25)ですが、「90.00」は必要ありません。私はそれに何か数学をする必要はありません、それは別のデバイスで行われますが、私は90のような数字の代わりに.0が必要です。

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(); 

何もオブジェクトが「90」を開催することを示し調べるため、期待されている番号()、と起こりませんでした。私は(それは価値があるもののために、それはまた、「TINYTEXTとしてのMySQLに保存されているが、私はドンの「90.0」がXMLであると一般的なオブジェクトはそれにアクセスするために使用されている場合、私は90.0を保持している文字列を参照してくださいだろうと期待しているだろうなぜXML出力が重要であるかを見てください)。 90.1と90.18は90.1と90.18に戻ります。

私は既に文字列のように扱うことができると知っていましたが、 '。'を探し、存在しない場合は、 ".0"を連結して、私の編集フォームに表示します。しかし、私の90.0の文字列を90として保存することを決定するよりスマートなものは何ですか?そしてそれを切り捨てるように私はどのように言いますか? Atriace応答から、いくつかの検索/推測建物の後に更新


2016年4月21日には、私はまだ

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); 

とで、よりアトミックに行わXML構文解析を持ってしようとした、I resultObj.rs.configuration.threshholdが "90"を保持していることを参照してください。私も同じことをいくつか試みました。そのevent.message.bodyは90.0だった見てよかった、と何かが、私はそれではなく、文字列の数に変えたい決める停止した場合はそれもよりよいだろう。

+0

'var n:Number = Number(event.result.rs.configuration);を使用するとどうなりますか?これは90.0ですか?また 'event.result.rs.configuration.threshhold'をターゲットにしてはいけませんか? –

+1

@ VC.oneあなたの最初の提案は動作しません。なぜなら、 'event.result.rs.configuration'は汎用オブジェクトではないNumberであるからです。提案: 'var treshhold:Number = Number(event.result.rs.configuration.treshhold); ' – DodgerThud

+0

または、これを" 90.0 "にする必要があるので、おそらくそれを文字列として保持したいと思うかもしれません:treshhold:String = Number(event。結果.rs.configuration.treshhold);別の方法として、番号を(計算に必要な場合は)そのままにして、NumberFormatter – Philarmon

答えて

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" 

はあなたが明示的に上記のやっていることであるNumber、としてStringをキャストしたときに、これはのみ発生することに注意してください。それでも、パーザが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); 
} 

この負荷&の結果を作成する操作は次のとおりです。

A debugger printout of the contents of datum

あなたが見ることができるように、「90.0」はまだあるとStringとして保存します。次に、UIの文字列(顧客の場合)を使用する単純な問題であり、結果に対して計算を実行する場合は、値をNumberとしてキャストします。

私はあなたのパーサーを見ていきたいと思います。あなたが望む以上のことをしているようです。

+0

第1回の更新を無視して、受信したデータにアクセスするために 'var o:Object = event.result.rs.configuration;'を使用し、 'var datum:XML = new XML(e.currentTarget.data);'を使用しました。私はパーサーにチェックするつもりはないと思う。私はあなたが提供したものを試しましたが、データがプロパティではなかったため実行時に失敗しました(私はFlex 4.5を使用しています)。しかしあなたのヒントでは、 'event.currentTarget._result.configuration.threshold'がそこにあり、それが" 90 "であることがわかります。私は新しいXML(event.message.body)を行い、 "90.0"がそれを作ったことを知ることができます。私はそれを得る方法がわからない、私はもっと読む必要があります。自動変換はまだ意味をなさない。ありがとう。 – trueskew

関連する問題