2 回答

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
JSON 與 Javascript 一樣,在整數(shù)和數(shù)字之間沒有區(qū)別。
如果 Dart 的處理方式1234.00與 不同1234,那么它正在對(duì)JSON 規(guī)范不支持的值做出假設(shè)。
雖然 Go 確實(shí)正確地封送了float64,但解決 Dart 假設(shè)問題的一種方法是在您自己的類型上實(shí)現(xiàn)Marshaler 接口:
type Number float64
func (n Number) MarshalJSON() ([]byte, error) {
// There are probably better ways to do it. It is just an example
return []byte(fmt.Sprintf("%f", n)), nil
}
然后您可以在您將編組的結(jié)構(gòu)中使用您自己的Number類型,而不是float64。通過這種方式,您可以確保您的數(shù)字始終使用小數(shù)點(diǎn)進(jìn)行編組。

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
以下似乎是(對(duì)我而言)解決方案。整數(shù)方法 toDouble() 也適用于“num”(反之亦然)。在我看來,在處理可能被 Dart 解釋為 double 或 int 的 json 和貨幣值時(shí),有必要使用“as num”,然后使用內(nèi)置方法 toDouble()。
示例(去):
type cuAcctRow struct {
.....
D_AcctBal float64
.....
}
if baJsAcctDet, oOsError = json.Marshal(uAcctRow); oOsError != nil {
示例(飛鏢):
Map mAcctData = json.parse(sResponse);
double dAcctBal = (mAcctData['D_AcctBal'] as num).toDouble();
我不知道為什么 Dart 不允許直接將整數(shù)賦值為 double,但我確信這是有充分理由的。
- 2 回答
- 0 關(guān)注
- 328 瀏覽
添加回答
舉報(bào)