使用go1.1.2 Win64,我有一個Go程序「marshal」是一個包含float64的結構。當float64的值不是整數時,例如。 1234.44,那麼它就像一個float(json.Marshal)一樣獲得「元帥」。但是,如果它是一個整數,例如。 「1234.00」它被整理爲一個整數「1234」。當我在另一端(Dart)接收到它時,Dart(30188)將整個數字視爲整數(在地圖 - JSON.decode中)。因此,當浮點(雙精度)數據的表示不包含小數點時,Dart程序將中止,並且我試圖從映射中「提取」它爲double。是否正確地將float64編碼爲JSON?
這顯然可以通過許多不同的方式解決(例如,轉換爲整數然後再轉換回浮點數),但是我想知道是否有另一種更好的方法來處理這種情況。
是否有另一種更好的方式來處理這比將float64轉換爲整數?
感謝您的解決方案。我認爲這應該在Dart結束時解決。看起來,一個整數不能被分配給Dart中的double。這在我看來是一個異常,但我承認,至少從理論的角度來看,我是錯的(鑄造,拋棄等)。我現在的解決方案如下:「double dAcctBal =(mAcctData ['D_AcctBal'] as num)/ 1;」 (其中mAcctData是其中「D_AcctBal」可以是整數或雙精度的映射,取決於它是否是整數)。這個解決方案對我來說似乎有些破綻,但是如果一個整數不能直接分配給一個double? –
是的,我同意最好在飛鏢結束時解決它。如果我知道的話,我也會很樂意給你這樣的解決方案,但是我對Dart的經驗非常有限。也許有更多知識的人可以找到更加習慣的飛鏢解決方案。 – ANisus
JSON沒有指定其數字文字的語義,所以使用雙精度比整數更不正確。飛鏢有兩種數字類型。任何包含小數點或指數部分的東西都必須是double,其他所有內容都被解析爲整數,這在Dart中提供的精度比雙精度要高。這儘可能地保留了來自JSON號碼的儘可能多的信息。如果您希望所有數字都是雙打,它確實需要您手動使用.toDouble。 – lrn