:-) hm, wer Lust hat, kann ja mal meine Rundungsfunktion testen bzw. daran seine eigene Rundungsfunktion.
Ich hoffe zwar, dass meine Lösungsvariante im Bereich bis 10 Stellen nach dem Komma sicher ist, aber so genau weiß dass ja keiner, wenn man nicht alle wirklich durchgeschaut hat.
Ansonsten, zur Bestimmung der Fehlerquote in der Schleife, verwende ich zur Berechnung des Zählers toFixed(3). Das funktioniert ganz gut und ist in Mozilla, Opera und IE getestet. Zum Testen wird also ein Browser benötigt, der toFixed kann.
Über ein Feedback würde ich mich schon freuen.
Viele Grüße
Antje
--- Runden ---
<html>
<head>
<title>Test - Ausgabe von toFixed</title>
<meta name="author" content="Antje Hofmann">
</head>
<body>
<pre><script type="text/javascript">
<!--
function strRepeat(n) { //Rückgabewert: String
if (isNaN(n)) return this;
var repeatString = "";
for (var i=0;i<n;i++) repeatString += this;
return repeatString;
}
String.prototype.strRepeat=strRepeat;
function replaceFixed(decimalPart) { //Rückgabewert: String
var myNumber = Math.abs(this).toString();
if (myNumber.indexOf("e") >-1) return myNumber;
decimalPart = parseInt(decimalPart);
if (isNaN(decimalPart)) decimalPart = 0;
if (decimalPart > 14) decimalPart = 14;
if (decimalPart < -20) decimalPart = -20;
var myIndex = myNumber.indexOf(".");
var signed = 1;
if (this < 0) signed = -1;
if (decimalPart > 0 ) {
if (myIndex == -1) myNumber+=".";
myNumber += ("0").strRepeat(decimalPart)
myIndex = myNumber.indexOf(".");
var myNumberArr = new Array();
myNumberArr[0] = parseInt(myNumber.substr(0,myIndex));
myNumberArr[1] = String(Math.abs(Math.round(signed*Number(("11" + myNumber.substr(myIndex+1,decimalPart)+"."+myNumber.substr(myIndex+1+decimalPart,1))))));
if (myNumberArr[1].charAt(1)==2) myNumberArr[0]++;
else if (myNumberArr[1].charAt(1)==0) myNumberArr[0]--;
myNumberArr[1] = myNumberArr[1].substr(2,decimalPart);
myNumber = myNumberArr.join(".");
} else
if (decimalPart <= 0) {
if (myIndex==-1) myIndex = myNumber.length;
if (myNumber.substr(0,myIndex + decimalPart+1) == "") return "0";
myNumber = myNumber.substr(0,myIndex + decimalPart) +"."+ myNumber.substr(myIndex + decimalPart,-decimalPart);
myNumber = String(parseInt(String(Math.abs(Math.round(Number(myNumber)*signed)))+("0").strRepeat(-decimalPart),10));
} else {
return String(Math.round(this));
}
if (this<0) return "-"+myNumber;
else return myNumber;
}
Number.prototype.replaceFixed=replaceFixed;
errors=0; counter=0;
for (i=0;i<2;i=Number((i+0.001).toFixed(3))) {
counter++;
if (i.toFixed(2) != i.replaceFixed(2)) {
FixedError ='<span style="color:red;font-weight:bold">';
errors++;
}
else FixedError ='<span>';
document.writeln(FixedError,i.toFixed(3),": toFixed: ",i.toFixed(2)," -- replaceFixed: ",i.replaceFixed(2),"</span>") }
document.writeln("Anzahl der Durchläufe: ",counter,"\nrelative Fehlerhäufigkeit: ", errors / counter * 100 +" % \nabsolute Fehlerhäufigkeit ", errors )
//-->
</script></pre>
</body>
</html>