Simon Reinhardt: Fließkommafehler

Beitrag lesen

Hi nochmal!

Ich glaub, ich hab's jetzt hingekriegt.
Ich hab noch zwei Funktionen geschrieben, die das Stellenzaehlen und das Runden auf eine bestimmte Stellenanzahl uebernehmen:

public static int floatingdigits(double d)
{
String s = d+"";
int pos = s.indexOf(".");
if(pos != 0 && pos != s.length()-1)
  return s.substring(pos+1, s.length()).length();
return 0;
}

public static double roundtodigits(double d, int digits)
{
d *= Math.pow(10, digits);
return Math.rint(d) / Math.pow(10, digits);
}

Fuer die Schleife sieht das dann so aus:

int digits = floatingdigits(section.step);
for (double x=section.from; x<=section.to; x=roundtodigits(x+section.step, digits))
calcedpoints.add(calcpoint(term, var, x));

Ich zaehle die Stellen der Schrittweite und runde damit den Zaehler x. So erhalte ich genau die richtigen Werte.
Lustig wird's allerdings, wenn ich die Schrittweite verfeinere: bei 0.0001 rechnet er noch lustig vor sich hin, auch wenn es ein bisschen laenger dauert. Bei 0.00001 erhoeht er x allerdings gar nicht mehr, sondern zeigt nur noch -3 an. Naja, ich glaube aber nicht, dass jemand eine Funktion so genau berechnet haben will, hier kann ich also getrost eine Beschraenkung einbauen :-)

MfG Simon