webForumDet fria alternativet

PHP stapeldiagram procentfel

2 svar · 539 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004903 inlägg
#1

Lite problem att få till procentsifforrna så att dem stämmer om man räknar ihop alla. Det är inget fel på värdena, det är bara det att jag helst inte vill skriva ut en massa decimaler.... det måste finnas ett sätt att lösa detta på.

så här ser det ut

<?php
//antal staplar så att looparna körs rätt antal gånger
$staplar = 20;

function GetAntal($kategori){
$get = "SELECT COUNT(id) as antal FROM x WHERE x='$x";
$do = mysql_query($get) or die('ERROR 112');
$value1 = mysql_fetch_assoc($do);
return intval($value1['antal']);
}

?>
<div align="left" style="width:800px; margin-top:10px; color:#666666; font-size:13px;">
<img src="pic/dsgn/statistik_t.png" alt="" border="0" style="margin-top:10px; margin-bottom:5px; margin-left:10px;" />
<br />

<?php

//Alla kategorier
$kategori[0] = "x";
$kategori[1] = "x";
$kategori[2] = "x";
$kategori[3] = "x";
$kategori[4] = "x";
$kategori[5] = "x";
$kategori[6] = "x";
$kategori[7] = "x";
$kategori[8] = "x";
$kategori[9] = "x";
$kategori[10] = "x";
$kategori[11] = "x";
$kategori[12] = "x";
$kategori[13] = "x";
$kategori[14] = "x";
$kategori[15] = "x";
$kategori[16] = "x";
$kategori[17] = "x";
$kategori[18] = "x";
$kategori[19] = "x";
$kategori[20] = "x";

$GetKategori[0] = "x";
$GetKategori[1] = "x";
$GetKategori[2] = "x";
$GetKategori[3] = "x";
$GetKategori[4] = "x";
$GetKategori[5] = "x";
$GetKategori[6] = "x";
$GetKategori[7] = "x";
$GetKategori[8] = "x";
$GetKategori[9] = "x";
$GetKategori[10] = "x";
$GetKategori[11] = "x";
$GetKategori[12] = "x";
$GetKategori[13] = "x";
$GetKategori[14] = "x";
$GetKategori[15] = "x";
$GetKategori[16] = "x";
$GetKategori[17] = "x";
$GetKategori[18] = "x";
$GetKategori[19] = "x";
$GetKategori[20] = "x";

//Referenser i varje kategori
for($i = 0; $i <= $staplar; $i++){
$antal[$i] = GetAntal($GetKategori[$i]);
}

//räknar ut antal 
for($i=0; $i<=$staplar; $i++){
$sum +=$antal[$i];
}

$barH = 3; //Bestämmer höjden på staplarna

//Omvandlar värden till procent i form av 10.0%
for($i = 0; $i <= $staplar; $i++){
$value[$i] = ($antal[$i] / $sum) * 100;
$value[$i] = number_format($value[$i], 1, '.', '');
}
?>

<table width="122" border="0" align="center" cellspacing="0" cellpadding="2" id="graph">
  <tr>
	<?php
	for($i=0; $i<=$staplar; $i++){
	?>
    <td width="20" valign="bottom" align="center" title="<?php echo $kategori[$i];?>: <?php echo $antal[$i];?> st">
	<?php	
	echo $value[$i];
	echo "%";
		?>
	<img src="pic/vb.gif" width="20" height="<?php echo $value[$i]*$barH; ?>" alt="" border="0" /><br />
	</td>
	<?php
	}
	?>
  </tr>
</table>
</div>

För att förklara ytterligare... I detta fallet så har vi 21 staplar och varje stapel får ett värde som består av x% som vi skriver ut ovanför staplarna. Räknar man då ihop alla dessa siffror ska det helst bli 100% totalt :)

Sen om ni undrar vad alla x gör så är det bara jag som tagit bort vad som stod där egentligen.

aasahMedlem sedan mars 20034 471 inlägg
#2

Om det inte funkar med round på värdena - bör ju inte bli mycket fel i alla fall, kan du kanske använda round på alla värden utom det sista, och där avrunda åt ett sådant håll att summan blir 100?

Om du vill ha hela procent är det ju bara att ta round(tal*100)/100.

TulorkMedlem sedan aug. 2004903 inlägg
#3

Jo, det går ju att fixa det på det sättet... men helst ska procenten vara så korrekt som möjligt.. men man kanske får göra det du säger med att avrunda den sista tills det totala värdet är 100.

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