2016-04-05 9 views
1

benim başından bu kodu koymak() yöntemi: Bu çıktısını oluyorMathUtil.round() dosyasından hatalı sonuçlar alıyorum. Bu bilinen bir hata mı yoksa yanlış bir şey mi yapıyorum?

float dummy = -4.3219876F; 
int rounded = MathUtil.round(dummy); 
System.out.println("Float " + dummy + " rounded = " + rounded); 
double dummy2 = -4.3219876; 
long rounded2 = MathUtil.round(dummy2); 
System.out.println("double " + dummy + " rounded = " + rounded2); 

:

public static int round(float a) { 
    return (int)(a + 0.5f); 
} 

ise tamsayı kesme:

Float -4.3219876 rounded = -3 
double -4.3219876 rounded = -3 

yuvarlak yöntem şöyle matematikçinin yolu olarak tanımlandı (sayıya eşit veya daha büyük en büyük tamsayı) Sonra -3.8'in kesilmesi -4 olurdu ve bu iyi çalışıyordu. Ama bu şekilde tanımlanmadı. Bu yöntem böyle bir şey yazılmalıdır:

public static int round(float a) { 
    if (a < 0) { 
     return (int)(a - 0.5f); 
    } else { 
     return (int)(a + 0.5f); 
    } 
} 
+0

Daha önce bir yazı yazdım (şimdi silindi), bu sorunun ortadan kalktığını, ancak yanılmışım. (MathUtil.round() yerine Math.round() kullandım çünkü gittim. MathUtil.round() kullandığımda, sorun hala var. – MiguelMunoz

cevap

1

Tamam, ben yerine com.codename1.util.MathUtil ait java.lang.Math kullanırsanız, ben göndermek sonra bile çalışıyor keşfetti beri var Android'ime Java.lang.Math'tan kaçındım çünkü MathUtil'in varlığı beni Math'ın yasak bir sınıf olduğuna inandırdı. MathUtil sınıfını kullanmaktan kaçınmalı mıyım?

+0

Bu durumda derleyici biraz özel olduğundan matematik daha iyi olurdu iOS'ta bunun için optimizasyonlar MathUtil'i sadece Math'ı çağırmak için düzeltirim. Oldukça eski bir sınıf, bu yüzden artıklar içerir. –

+0

Teşekkür ederim. Muhtemelen Math.atan() didn'i keşfettiğimi belirtmeliyim. Yapmam, bu yüzden MathUtil.atan() kullanmak zorunda kaldım, bu yüzden MathUtil gitmek için iyi bir yol olurdu. – MiguelMunoz