webForumDet fria alternativet

Decimalfel

4 svar · 576 visningar · startad av jonelo

joneloMedlem sedan feb. 200622 inlägg
#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;

?>
CroolieMedlem 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;

?>
joneloMedlem 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.

joneloMedlem 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.

MickeA.comMedlem 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!

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)