Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
double of float bliver næsten altid "unøjagtige" under udregninger. du bør derfor ikke benytte == da samtlige bits skal være nøjagtig ens for at give true. evt. kan du lave en lille method public boolean compare(double d1, double d2) { double treshold = 0.000001; // grænsen for om de er ens double diff = (d1>d2)?d1-d2:d2-d1; // forskellen som positivt tal return (diff < treshold); } hvis du vil formatere en double kan du bruge et NumberFormat objekt.
Beregn 999.1 *3 og læg det i en variabel. Træk fra denne 2997. Så skulle du have 0.3 ikke? Men du har i virkeligheden 0.3000000000001819 det skrives bare ikke rigtigt ud på skærmen når det er 2997.3000000000001819 hvilket skyldes udskriftsrutinen ikke tallet. Du kan afrunde til to decimaler ved: double x = ....; double xMedToDecimaler = 0.01*((int)x*100);
Du kan lave en metode som denne der afrunder til n betydende cifre: public static double afrund( double x, int n ) { double pow = Math.pow(10,n); return ((int)x*pow)/pow; }
Nå, nå, så prøver vi igen (jeg troede at casting afrundede, men den trunkerede): public static double afrund( double x, int n ) { double pow = Math.pow(10,n); return Math.round(x*pow)/pow; }
riversen: At det ikke nøjagtigt giver det du synes det skal give, skyldes at floating point tal ikke er 100% nøjagtigt, da det ville kræve et uendeligt antal bit.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.