webForumDet fria alternativet
Logga in / Bli medlem

Decimalfel

PHP

4 svar · 578 visningar · startad av jonelo

Medlem sedan feb. 200622 inlägg
Trådstart#1

Har ett mysko problem. Koden nedan resulterar i att variabeln $new blir 0.70999999999999 när den egentligen borde bli 0.71. Vad kan det vara som är fel? Sjukt irriterande. Blir så både lokalt på min testburk och på servern.

<?php

$price = 100.71;
$new = $price - 100;

echo $new;

?>
Medlem sedan dec. 200435 inlägg
#2

Det du kan göra är att använda funktionen round() där den andra parametern anger hur många decimalers noggrannhet svaret ska ha.

<?php

$price = 100.71;
$new = round($price - 100.00, 2);

echo $new;

?>
Medlem sedan feb. 200622 inlägg
#3

Jo men man tycker att detta inte ska behöva rundas då utgångssumman bara har två decimaler och resultatet kort och gott blir en summa med två decimaler.

Det går ju att göra tvärt om utan problem. Dvs denna kod fungerar ju som den bör utan rundning:

<?php

$price = 100;
$new = $price + 0.71;

echo $new;

?>

Summan där blir ju 100.71 utan att man behöver runda något.

Medlem sedan feb. 200622 inlägg
#4

Då har jag letat vidare på nätet och fått felet bekräftat och dessutom förklarat. Är någon intresserad? Se följande:
http://bugs.php.net/bug.php?id=8164
http://bugs.php.net/bug.php?id=9692

Lösningen är då alltså att köra round(), precis som du säger Croolie.

Medlem sedan feb. 20034 441 inlägg
#5

Tjena
Nu har jag lite problem med decimaler.
Mina talvärden hämtar jag via XML, måste jag då konvertera dessa till tal?

$sumbrake	= 0;
foreach($xml->mypayouts->payout as $payout){
	$row_class = ($row_class == "row-even") ? "row-odd" : "row-even";
	print("<tr class=\"" . $row_class . "\">\n"
		 ."<td class=\"table-content\">" . $payout->brake . "</td>\n"
		 ."</tr>\n");
	$sumbrake += $payout->brake;
}
print($sumbrake);

Ovanstående kod skriver ut ett heltal som summa, trots att varje "rad" i loopen är ett decimaltal, då det är många rader, så blir det en stor diff i totalfältet.

Måste jag deklarera $payout->brake som tal och hur gör jag isf. det?
Jag vill visa varje rad samt det totala med två decimaler.

Tack!

259 ms totalt · 4 externa anrop · v20260731065814-full.50d4b5bd
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)