Sto usando Node.js e l'oggetto JSON incorporato per stringificare un oggetto JSON. Nell'oggetto èJSON stringifica la conversione di float in int
{
weight : 1.0
}
Tuttavia quando ho stringa i e scrivere in un file l'output è il peso: 1.
Sto usando Node.js e l'oggetto JSON incorporato per stringificare un oggetto JSON. Nell'oggetto èJSON stringifica la conversione di float in int
{
weight : 1.0
}
Tuttavia quando ho stringa i e scrivere in un file l'output è il peso: 1.
In realtà il vostro non è un problema, 1 == 1.0 == 1.00
in Javascript e se si dispone di un valore float come 1.55
allora stringa i ti dà la stessa 1.55 not 1
.. Anche in questo caso, se si desidera 1.0
da scrivere, modificare il valore nella stringa di
intendo Racchiudere il valore tra doppie virgolette
{
weight : "1.0"
}
Questo è ancora un problema se il file JSON è inteso per il codice scritto in una lingua diversa che distingue tra "1.0" e "1". –
In realtà questo può essere un problema. Per esempio. abbiamo un generatore di schemi JSON, che utilizza i dati dal client javascript. Il problema è che per il generatore 1.0 crea il tipo "numero", ma per 1 crea "intero". Quindi quando i dati cambiano, ad es. per 1.2 si convalida 1.2 contro intero ... che fallisce. –
Come notato in this answer a una domanda simile, e this MSDN page:
Non esiste una cosa come un intero in JavaScript. I numeri in JavaScript sono "valori IEEE 754 in formato a 64 bit a precisione doppia".
Aprire la console del browser Web e digitare 1.0
. Vedrai lo 1
stampato. Tutti i numeri in JavaScript sono numeri in virgola mobile, quindi il serializzatore ha semplicemente scelto di lasciare la precisione non necessaria.
ma quando scrivo, 'JSON.stringify (0.1)', perché stampa '0.1' e non' 0.1000000000000000055511151231257827021181583404541015625'? ha lasciato la necessaria precisione –
Quel numero non può essere rappresentato come un numero in virgola mobile a 64 bit. In generale, i numeri in virgola mobile sono pessimi per rappresentare numeri che non possono essere facilmente scritti nella forma 3.14159 ... * 2^n dove "..." rappresenta poche cifre e n non è enorme. –
Non so quale sia il problema. '1' e' 1.0' sono la stessa cosa in JavaScript. – phenomnomnominal
usa 'parseInt (obj.weight)' – Heavy
Prova con 1.5 e vedrai che mantiene i decimali. – techfoobar