SORU
29 Aralık 2011, PERŞEMBE


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
29 Aralık 2011, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GamingAndTech

    GamingAndTec

    16 NİSAN 2013
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • Living Waters

    Living Water

    9 AĞUSTOS 2006