2010-09-04 18 views
9

değerini döndürür Bir şeyin yüzdesini hesaplamaya çalışıyorum. Bu basit bir matematiktir. İşte kod.Yüzde Hesaplaması her zaman 0

float percentComplete = 0; 
if (todaysCollection>0) { 
    percentComplete = ((float)todaysCollection/(float)totalCollectionAvailable)*100; 
} 

İşte todaysCollection değeri 1751 ve totalCollectionAvailable Hem int olan 4000 olduğunu. Ancak percentComplete her zaman 0 gösterir. Bu neden oluyor? Herhangi biri bana yardım edebilir.

+0

, sana sıfır için böleni test etmeli miyim başlamak! –

+0

@Mitch Wheat: Bu NaN ile sonuçlanmaz mıydı? –

+0

ama zaten 4000, "totalCollectionAvailable 4000" olduğunu – vodkhang

cevap

0

100 yeniyim, bazen bu sorundur. Bunun için iki kez kontrol edin. Nasıl PERCENTCOMPLETE gösterdiğinizi

sağ if ifadesi

+3

Büyük olasılıkla, sadece bir işlenenin ifadenin bir kayan nokta olarak değerlendirilebilmesi için bir kayan nokta olması gerektiğinden (dolaylı olarak) döküm). Bu sadece benim akıllı kesinti. – BoltClock

+0

Tam olarak obj-c'de nasıl göründüğünü bilmiyorum ama C# 'da bununla benzer bir sorunu vardı. (float)/(float) * öncesi (int) 'ye gönderilebilir. – cichy

+0

float/float her zaman float –

1

Ben todaysCollection ve totalCollectionAvailable için değeri yanlış olduğunu düşünüyorum); Objective C

Belki * (şamandıra) ile denemek
11

önce NSLog(@"%d", todaysCollection) koyun Fakat PERCENTCOMPLETE hep 0

gösterir? Unutmayın ki bir şamandıradır - eğer onu bir int gibi yorumlamadan dönüştürürseniz, yanlış çıktı elde edersiniz. Örneğin, bu:

int x = 1750; 
int y = 4000; 
float result = 0; 
if (x > 0) { 
    result = ((float)x/(float)y)*100; 
} 
NSLog(@"[SW] %0.1f", result); // interpret as a float - correct 
NSLog(@"[SW] %i", result);  // interpret as an int without casting - WRONG! 
NSLog(@"[SW] %i", (int)result); // interpret as an int with casting - correct 

sonucu verir:

bir tamsayı türüne kayan nokta değeri döküm sadece ondalık noktadan sonraki şeyler atar
2010-09-04 09:41:14.966 Test[6619:207] [SW] 43.8 
2010-09-04 09:41:14.967 Test[6619:207] [SW] 0 
2010-09-04 09:41:14.967 Test[6619:207] [SW] 43 

Ayı akılda - yani benim örnekte 43.8 vermektedir 43'e kadar, örneğin en yakın tamsayı kullanımı math.h gelen yuvarlama işlevlerinden biri kayan nokta değeri yuvarlamak için:

#import <math.h> 

... rest of code here 

NSLog(@"[SW] %i", (int)round(result)); // now prints 44 
+0

Mükemmel, harika, teşekkürler, seni seviyorum! Bu doğru cevap. =) – RanLearns

İlgili konular