Büyük tamsayı olan JSON transfer: 12000000000002539 12000000000002540 dönüştürülür?
[{id: 12000000000002539, Name: "Some Name"}]
gibi ham veri transfer ediyorum ve nesne [{id: 12000000000002540, Name: "Some Name"}]
sunucu tarafı dize kimliği dönüştürme yardımcı olur ayrıştırma, sonra alıyorum.
Ama orada daha iyi bir yol tamsayı veri transferi doğru mu?
CEVAP
Değer aslındadeğilJavaScript içinde en yüksek sayısal değeri aşan "" 1.7 . sadece olan ^sup>308ya da o yüzden).
Ancak, değerisınırı aşan "ayrılmaz hassas". Yanlış numaraya gönderilen değildir: bunun yerine, budeğişmez12000000000002539sadece tam olarak . gösterilebilir 12000000000002540 ve böylece vardıaslaJavaScript doğru sayısal değeri. (range of integrals - 2 / hakkında53.)
Bu a double relative-precision (IEEE-754 içinde binary64 konuşma) tüm sayısal değerler, tamsayılar dahil olmak üzere saklamak için türünü kullanarak ilginç bir fenomen
12000000000002539 === 12000000000002540 // true
Tam olarak sayısal bir değer olarak depolanan ondalık basamak önemli sayı 15 (15.95, gerçekten). Yukarıda, 17 önemli basamak, bu yüzden bazı vardıren önemli bilgi sessizce kaybolur. Bu durumdagibiJavaScript ayrıştırıcı/motor edebi değeri okur.
JavaScript içinde bu büyüklükte ayrılmaz numaralarını işlemek için tek güvenli yolu, edebi veya başka bir şekilde kırmak için bir dize (veya "bigint library" örneğin bir özel sayısal tipi) kullanmaktır. AncakSadece bir dize kullanmanızı tavsiye ederizinsan okunabilir , nispeten kompakt (JSON sadece iki ekstra karakter) ve Özel seri hale getirme gerektirmez. Değeri "id" bu durumda, matematik üzerine yapılan gerek yoktur umarım :) . sadece bu yana
Mutlu kodlama.
Tamsayı olmayan üs?sabit olan pow() iy...
Mini tamsayı, küçük tamsayı, mediumint...
Nasıl bir değer boyutu 8 bit daha büyü...
Alma "JSON isteği serisi için çok...
Raylar JSON doğru (dizi tamsayı tuşlar...