2017-08-31 2 views
0

Ich übergebe die genaue Id (d. H. 123456789123456.99) von Controller in JSONResult, aber wenn ich den Wert in AJAX Antwort bekomme, bekomme ich Id (d. H. 123456789123456.98).Parsing Dezimalwert Problem

Ich habe ein merkwürdiges Verhalten in JavaScript beim Parsen von Daten beobachtet. Bitte schauen Sie in das Bild unten. Kann mir bitte jemand hier helfen, die gleiche ID nach dem Parsen durch JSON zu bekommen.

enter image description here

+0

Wäre kein String tun? – Teemu

+0

Willkommen in der Welt der Gleitkommazahlen, .. Es ist auch kein JSON-Problem .. Für eine bessere Handhabung von großen numerischen Zahlen gibt es eine Reihe von BCD-Implementierungen in Javascript, die Sie untersuchen möchten. – Keith

+0

Ich glaube, das hat mit Gleitkomma-Ungenauigkeit zu tun, werfen Sie einen Blick auf https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples – Mike

Antwort

2

Der Id Wert ist zu groß. JavaScript verwendet Fließkommazahlen mit doppelter Genauigkeit für Zahlen und sie haben ungefähr 15 Stellen der Genauigkeit. Die höchste Ganzzahl, die JavaScript zuverlässig speichern kann, ist etwa 2^51. Deshalb wird der Wert beim Parsen gerundet.

Allerdings können Sie diese Einschränkung umgehen, indem Sie die Nummer als String wie so sendet:

var res = '{"Id":"123456789123456.99"}'; 
+0

Ich möchte keine neue Eigenschaft mit Zeichenfolge in meinem Modell hinzufügen. Gibt es eine andere Lösung? – Ronak