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
risposta
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.
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
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
}
Utilizzando il modulo funziona:
if(num % 1 != 0) do something! // eg. 23.5 % 1 = 0.5
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
Io uso questa funzione c per c obiettivo
BOOL CGFloatHasDecimals(float f) {
return (f-(int)f != 0);
}
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);
}
}
Guardando a loro? Se vuoi una soluzione programmatica, forniscici maggiori informazioni. – skaffman
(E la lingua in cui lavori.) – dkarp