2009-06-30 24 views
100

Bu naif bir soru olsa beni affet, ancak bugün bir kayıp yaşıyorum.Olası Fraksiyon Kaybı

double returnValue = (myObject.Value/10); 

değer nesnedeki bir int aşağıdaki gibi

basit bir bölme hesaplama vardır.

Muhtemel Kesir Kaybını yazan bir ileti alıyorum. Ancak, ikiliyi int olarak değiştirdiğimde, mesaj kaybolur.

Bunun neden olabileceği konusunda bir fikrin var mı? Bir kayan nokta değeri içine iki int 's böldüğümüzde ben myObject beri düşünüyorum

+0

Harika yanıtlar için hepinize teşekkür ederiz. Artık 2 int değerini bölerek ondalık noktasını kaybettiğinizi anlamış oluyor. – CodeLikeBeaker

cevap

138

kesir kısmı kaybolur olmalıdır. Öğelerden birini yüzmeye gönderirseniz, bu hatayı almazsınız. / her iki tarafı türü tamsayı olduğundan

Yani, örneğin, myObject.Value bir int olup olmadığını tamsayı bölme yapıyoruz bir 10,0

double returnValue = (myObject.Value/10.0); 
3

bir int, sen

double returnValue=(myObject.Value/10.0); 
51

içine 10 çevirin.

Kayan noktalı bölümleme yapmak için, ifadedeki sayılardan biri kayan nokta türünde olmalıdır. myObject.Value çift vardı ya Aşağıdakilerden herhangi eğer bu doğru olurdu:

double returnValue = myObject.Value/10.0; 
double returnValue = myObject.Value/10d; //"d" is the double suffix 
double returnValue = (double)myObject.Value/10; 
double returnValue = myObject.Value/(double)10; 
6

senin bir tamsayı döndürür bir tamsayı bölü bir tamsayı. Değer ikiye katlayın veya 10.0'a bölün.

6

myObject.Value'un int olduğunu varsayarsak, myObject.Value/10 denklemi bir tamsayı bölümü olacak ve bu da bir çifte dönüştürülecektir.

Bu, myObject.Value öğesinin 12 olmasının, returnValue'nin 1, olmasının 1.2 olmasına neden olacağı anlamına gelir. çiftler kendi sınırlamaları verilen izin edecektir ama bu SO başka bir yerde tartışılan oluyor neredeyse,

double returnValue = (double)(myObject.Value)/10.0; 

Bu, doğru değer 1.2 en az doğru olarak neden olur:

Önce değer (ler) döküm gerekir Sonsuz bir şekilde :-).