go1.1.2 Win64を使って、私は "marshal"がfloat64を含む構造体のGoプログラムを持っています。 float64の値が整数でない場合など。 1234.44であれば、浮動小数点数として "マーシャル"されます(json.Marshal)。しかし、それは整数である。 「1234.00」は整数「1234」としてマーシャリングされます。それを他端(Dart)で受け取ったDart(30188)は、整数を整数として扱います(マップ - JSON.decode)。したがって、float(double)データの表現に小数点が含まれていない場合、Dartプログラムは異常終了し、マップからdouble型として抽出しようとします。float64をJSONに正しくマーシャリングしますか?
これは、明らかに、整数に変換してからfloatに変換するなど、さまざまな方法で解決できますが、この状況を処理する別の(より良い)方法があるかどうかは疑問でした。
float64を整数に変換するよりも、これを処理する別の方法がありますか?
ありがとうございます。私はこれをダーツの最後に解決すべきだと思う。 Dartではdouble型に整数を代入することはできません。これは私に異常なように見えますが、私は少なくとも理論的な観点からは間違っていることを認めます(キャストアップ、キャストダウンなど)。私が現在持っている解決策は次のとおりです: "double dAcctBal =(mAcctData ['D_AcctBal'] num)/ 1;" (ここで、mAcctDataは、 "D_AcctBal"が整数であるか、または整数であるかに応じて2倍になるマップです)。私にこの解決策は、ビットのハックが表示されますが、整数が直接ダブルに割り当てることができない場合は? –
はい、ダーツの最後で解決するのが最善であると私は同意します。もし私が知っていれば、私は喜んであなたにそのような解決策を与えるでしょうが、ダーツの私の経験は非常に限られています。たぶん知識が豊富な人は、もっと慣れ親しんだダーツのソリューションを見つけることができます。 – ANisus
JSONは数値リテラルのセマンティクスを指定していないので、整数より倍数を使用するのは正しいです。ダーツには2つの数値タイプがあります。小数点または指数部を含むものはすべてdouble型でなければならず、その他はすべて整数として解析されます。これはDartでは倍精度よりも精度が高くなります。これによりJSON番号からできるだけ多くの情報が保持されます。すべての数字を倍にするには、手動で.toDoubleを使用する必要があります。 – lrn