Javascript rechnet falsch mit float

Hallo zusammen
Ich habe ein Formular, in dem für ein Produkt der aktuelle Preis angezeigt wird und man in ein Textfeld einen neuen Preis dafür eingeben kann. Diese Eingabe wird überprüft und die Differenz zum “alten” Preis ausgerechnet. Klingt einfach, ist es eigentlich auch, aber umso mehr verwundert mich folgendes Resultat:

function dif_calc(id) // Berechnet Aenderung (Differenz) zwischen vorhandenem und neu angegebenem Preis
{
	var input = document.getElementById('neupreis_'+id).value;  // Hier: 2.50 (String)
	
	if (input != "" && !isNaN(input) && (parseFloat(input) > 0)) // Eingabe korrekt
	{
		var preis_alt = parseFloat(document.getElementById('origpreis_'+id).value); // Hier: 2.55 (String->Float)
		var preis_neu = parseFloat(input);
		
		if ((preis_neu != preis_alt) && (preis_alt > 0))
		{
			var diff = preis_neu - preis_alt;
			var proz = Math.round((diff/preis_alt)*100);
			alert ("Preis neu: "+preis_neu+"\r\nPreis alt: "+preis_alt+"\r\nDiff: "+diff+"\r\nProz: "+proz);
// Weitere Befehle...
		}
	}
}

alert ergibt folgendes Resultat:

[quote]Preis neu: 2.5
Preis alt: 2.55
Diff: -0.04999999999999982
Proz: -2[/quote]
Wieso ergibt die Differenz eine solche (fast richtige) Zahl, wo doch 2.5 - 2.55 einfach -0.05 ergeben sollte? :astonished:
Vielen Dank schon mal für eure Hilfe…

http://forum.de.selfhtml.org/archiv/2005/10/t117689/#m753906

na toll, so’n mist… :motz:
Danke für den Link!

Das kannst du dir gleich merken, Floats werden vor der Ausgabe immer gerundet. Das I/O-System von C++,Java,… macht sowas automatisch, in JS musst du das selbst erledigen.

var diff = -0.04999999999999982;
alert(diff.toFixed(2));