2011-01-12 13 views
11

Float numarasının 2.10, 2.45, 12382.66 ve 2.00, 12382.00 gibi ondalık sayı içerip içermediğini nasıl kontrol edebilirim. Numara "yuvarlak" olup olmadığını bilmek istiyorum. Bunu programlı olarak nasıl yapabilirim? Eğer sadece iki ondalık sayıları önem veriyorsanızFloat numarasının ondalık sayı içerip içermediğini kontrol edin

+1

için bu c işlevini kullanın? Programlı bir çözüm istiyorsanız, bize daha fazla bilgi verin. – skaffman

+2

(Ve içinde çalıştığınız dil.) – dkarp

cevap

5

, this topic anlatıldığı gibi bir kesirli kısmını almak jenerik durumda bool hasDecimals = (((int)(round(x*100))) % 100) != 0;

hesaplayarak kalan almak ve bu yapabilirdi 0.

+2

Bu benim için güzel çalıştı. Objective-C btw kullanıyorum. Değerlendirmeye önem verdiğiniz kaç kilometre olduğunu bildiğiniz sürece, bu basit ve iş yapıyor. Ve ondan kaç onluk noktanın önem verdiği ile çarparak, yukarıdaki örnekte "100" oluşumlarını değiştirmek için daha esnek hale getirmek için bunu değiştirebilirsiniz. – idStar

3

karşılaştırmak:

float num = 23.345f; 
    int intpart = (int)num; 
    float decpart = num - intpart; 
    if(decpart == 0.0f) 
    { 
    //Contains no decimals 
    } 
    else 
    { 
    //Number contains decimals 
    } 
40

modülü çalışacaktır kullanma:

if(num % 1 != 0) do something! // eg. 23.5 % 1 = 0.5

+2

Harika bir yanıt, ancak bu [PHP] 'de çalışmayacaktır (http://php.net/manual/en/language.operators.arithmetic.php): "Modülün işlenenleri tam sayılara dönüştürülür (ondalık kısım sıyırılarak) işlemeden önce. – Daan

6

Onlara bakarak objektif c

BOOL CGFloatHasDecimals(float f) { 
    return (f-(int)f != 0); 
} 
2
import java.lang.Math; 
public class Main { 
    public static void main(String arg[]){ 
     convert(50.0f); 
     convert(13.59f); 

    } 

    private static void convert(float mFloat){ 
     if(mFloat - (int)mFloat != 0) 
      System.out.println(mFloat); 
     else 
      System.out.println((int)mFloat); 
    } 
}