2011-01-12 5 views
11

Come posso verificare se un numero a virgola mobile contiene decimali come 2.10, 2.45, 12382.66 e non 2.00, 12382.00. Voglio sapere se il numero è "rotondo" o meno. Come posso farlo programmaticamente?Verificare se un numero float contiene o meno decimali

+1

Guardando a loro? Se vuoi una soluzione programmatica, forniscici maggiori informazioni. – skaffman

+2

(E la lingua in cui lavori.) – dkarp

risposta

5

Se vi interessa soltanto due decimali, ottenere il resto calcolando bool hasDecimals = (((int)(round(x*100))) % 100) != 0;

Nel caso generico ottenere una parte frazionaria, come descritto nella this topic e confrontarlo con 0.

+2

Questo ha funzionato magnificamente per me. Sto usando Objective-C btw. Finché sai quanti decimali ti interessano valutare, questo è semplice e fa il lavoro. E puoi modificarlo moltiplicando 10 per la potenza di quanti punti decimali ti interessano, per sostituire le occorrenze di "100" nel campione sopra, per renderlo ancora più flessibile. – idStar

3

Si potrebbe fare questo:

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

Utilizzando il modulo funziona:

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

+2

Ottima risposta, ma questo non funzionerà in [PHP] (http://php.net/manual/en/language.operators.arithmetic.php): "Gli operandi del modulo vengono convertiti in numeri interi (eliminando la parte decimale) prima dell'elaborazione. " – Daan

6

Io uso questa funzione c per c obiettivo

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); 
    } 
}