webForumDet fria alternativet

Två decimaler på icke heltal

PHP

6 svar · 429 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Hej

Jag ska mata ut lite priser från en databas. Vissa priser ska visas med 10% rabatt.

När jag räknar om priserna med rabatt händer det ibland att det inte blir ett heltal och då vill jag visa priset med två decimaler.

Jag tänkte göra ungefär så här

<?
function showPrice($p, $d){
 if ($d)
  $p = number_format($p*0.9, 2);

 if (!is_int($p))
  $p = number_format($p*0.9, 2);

 return $p;
}
?>

Pris UTAN rabatt: <? echo showPrice($price, false) ?>
Pris MED rabatt: <? echo showPrice($price, true) ?>

Problemet är nu att $p av någon anledning är en sträng och då funkar inte if (!is_int($p)) som jag vill. :(

Medlem sedan aug. 20002 975 inlägg
#2

Testa med att använda is_numeric() istället för is_int().

Medlem sedan nov. 200013 890 inlägg
#3

Det spelar ingen roll. Kör jag gettype($p) så får jag svaret string.

Medlem sedan maj 20018 027 inlägg
#4

Funktionen "number_format" returnerar en string, så det verkar ganska naturligt att "$p" då också är en string. I vart fall om "$p" har blivit tilldelad från "number_format". Pröva att beräkna "$p" utan att gå via "number_format", så har du åtminstone behållt datatypen hos "$p" (för det är väl så att datatypen kan ändras lite hur som helst i php? Håller egentligen inte på med det språket. ;) ).

Medlem sedan nov. 200013 890 inlägg
#5

Problemet är att $price (och därmen $p) hela tiden är en sträng.

Håller med om att det där med datatyper är lite konstigt i PHP.

Medlem sedan nov. 200013 890 inlägg
#6

Hmm... Var lite snabb med att svara.
is_numeric() returnerar true men det hjälper mig inte eftersom jag måste veta om $p är ett heltal eller inte.

Medlem sedan nov. 200013 890 inlägg
#7

Nu löste jag det sä här:

<?
function showPrice($p, $d){

	// ** Räknar ut förskottspris
	if ($d)
		$p = $p*0.9;

	// ** Innehåller punkt
	if (ereg("\\.",$p))
		$p = number_format($p, 2);

	return $p;
}
?>

Vissa kanske kallar det för "fullösning" - jag kalla det för "work around". :e

754 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
611 ms — hämta tråd, inlägg och bilagor (db)
140 ms — ändringar (db)