Utilizzando go1.1.2 Win64, ho un programma Go che "esegue il marshalling" è una struttura contenente un float64. Quando il valore del float64 non è un numero intero es. 1234.44, quindi diventa "maresciallo" ed come galleggiante (json.Marshal). Quando invece è un numero intero es. "1234.00" viene eseguito come numero intero "1234". Quando lo ricevo all'altra estremità (Dart), Dart (30188) tratta l'intero numero come intero (nella mappa - JSON.decode). Di conseguenza, il programma Dart si interrompe quando la rappresentazione dei dati float (double) non contiene un punto decimale, e io cerco di "estrarla" dalla mappa come una doppia.Go esegue correttamente il marshal float64 su JSON?
Questo può ovviamente essere risolto in diversi modi (ad esempio, convertire in numero intero e quindi riconvertire in float), tuttavia mi sono chiesto se c'è un altro (migliore) modo di gestire questa situazione.
C'è un altro modo migliore per gestire questo rispetto a convertire float64 in intero?
Grazie per la soluzione. Penso che questo dovrebbe essere risolto sulla fine del dardo. Sembra che un numero intero non possa essere assegnato a un doppio in Dart. Mi sembra un'anomalia, ma accetto di essermi sbagliato almeno da una prospettiva teorica (cast-up, cast-down, ecc.). La soluzione che attualmente ho è la seguente: "double dAcctBal = (mAcctData ['D_AcctBal'] come num)/1;" (dove mAcctData è la mappa in cui "D_AcctBal" può essere un numero intero o un doppio a seconda che si tratti di un numero intero). Questa soluzione mi sembra un po 'incisiva, ma se un intero non può essere assegnato direttamente a un doppio? –
Sì, sono d'accordo che sarebbe meglio risolverlo sul dardo fine. Vi sarei anche felice di darvi una soluzione del genere se lo sapessi, ma la mia esperienza con Dart è * molto * limitata. Forse qualcuno con più conoscenza può trovare una soluzione Dart più idiomatica. – ANisus
JSON non specifica la semantica dei suoi numeri letterali, quindi non è più corretto usare il doppio rispetto agli interi. Dart ha due tipi di numeri.Tutto ciò che contiene un punto decimale o una parte esponenziale deve essere un doppio, e tutto il resto viene analizzato come un numero intero, che in Dart fornisce più precisione del doppio. Ciò conserva quante più informazioni possibili dal numero JSON. Richiede di usare manualmente .toDouble se vuoi che tutti i numeri siano raddoppiati. – lrn