2013-05-21 15 views
5

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.

+2

Non so quale sia il problema. '1' e' 1.0' sono la stessa cosa in JavaScript. – phenomnomnominal

+0

usa 'parseInt (obj.weight)' – Heavy

+0

Prova con 1.5 e vedrai che mantiene i decimali. – techfoobar

risposta

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" 
} 
+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". –

+0

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. –

4

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.

+3

ma quando scrivo, 'JSON.stringify (0.1)', perché stampa '0.1' e non' 0.1000000000000000055511151231257827021181583404541015625'? ha lasciato la necessaria precisione –

+0

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. –