SORU
16 EYLÜL 2010, PERŞEMBE


Neden kullanmıyorsun ya da para birimi göstermek için Çift Yüzer?

Her zaman söylendiasla* *0 veya float türleri, ve size sorum poz bu sefer para ile temsil etmek üzere: neden?

Çok iyi bir nedeni vardır eminim, ben sadece ne olduğunu bilmiyorum.

CEVAP
16 EYLÜL 2010, PERŞEMBE


Ve olamaz yüzen iki katına çıkar, çünkü doğru para için kullandığımız temel 10 katları temsil eder. Bu sorun sadece Java için değil, varsayılan olarak bilgisayar-kayan nokta numaraları nasıl ele kaynaklanıyor gibi kayan nokta yerli türleri kullanan herhangi bir programlama dili için.

Bu nasıl bir IEEE-754 kayan nokta sayısı çalışır: onu ayırıyor biraz işareti, birkaç bit saklamak için bir üs için temel, ve geri kalanı için bir çok yükseltilmiş taban. Bu yol numaraları gibi 10.25 olmayı temsil bir form benzer 1025 * 10^-2; dışında yerine üssü olmak 10 floats doubles, Bu iki (çok olurdu 164 * 2^-4).

Hatta baz 10, Bu gösterim doğru olamaz en basit kesirler temsil eder. Örneğin, yapamazsın temsil 1/3 gibi bir çok gücü 10: ihtiyacın saklamak için sonsuz miktarda 3. ve son derece büyük negatif üs, ve sadece bunu yapamam. Ancak, çoğu durumda para amacı için 10 katları depolayamaz-2çok da kötü değil.

Bazı kesirleri 10, bazıları bir güç katları tam olarak 2 ya da güç katı olarak temsil edilebilir mi tam olarak temsil edemez. Aslında, sadece kesirler yüz arasında 0/100 ve 100/100 (bunlar önemli bir zaman para ile ilgili, çünkü onlar tamsayı sent) temsil edilebilir tam olarak bir IEEE-754 kayan nokta ikili sayı 0, 0.25, 0.5, 0.75 ve 1. Diğerleri küçük bir miktar.

Temsil eden para gibi bir double float muhtemelen iyi bak ilk olarak yazılım el ateş küçük hatalar, ama gerçekleştirmek için daha fazla eklemeler, subtractions, çarpım ve bölümleri üzerinde hatalı numaraları, kaybedersin daha hassas olarak hataları ekleyin. Bu yüzen yapar ve yetersiz temel 10 güçler katları için mükemmel doğruluk gereklidir para ile başa çıkmak için iki katına çıkar.

Herhangi bir dilde çalışan bir çözüm tamsayılar kullanın ve sent saymak. Örneğin, 1025 $10.25 olurdu. Birçok dilde aynı zamanda yerleşik para ile başa çıkmak için vardır. Diğerleri arasında, Java BigDecimal sınıfı ve C# decimal tipi vardır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • Michael Lummio

    Michael Lumm

    25 Mayıs 2007
  • XxMinayaxX1

    XxMinayaxX1

    9 Mayıs 2012