webForumDet fria alternativet

Avrunda med 2 deicmaler

PHPur PHP

9 svar · 896 visningar · startad av Maacus

Medlem sedan jan. 2007108 inlägg
Frågan#1

Har en funktion som avrundar ett värde till 2 decimaler och om talet inte har två decimaler så lägger jag till nollor efter. Men jag känner att min lösning inte är den bästa.

För när talet blir mer än 2 tecken framför kommatecknet så funkar inte min kod längre. Är värdet 100.60 så tar "round" bort nollan.

		
$fund = round($rad['rate'],2);
if( strlen($fund) == 2){
	$fund .= ".00";			
}
if( strlen($fund) == 4){
	$fund .= "0";			
}
Medlem sedan mars 20007 896 inlägg
#2

Vill du även visa de två sista decimalerna, även om det är ett heltal?

$str = "123";
$val = strval(round(str_replace('.', ',', $str), 2));
if(strpos($val, '.') === false) {
	$val .= '.00';
}
echo $val;
Medlem sedan juni 20006 031 inlägg
#3

Använd funktionen number_format() istället för round och slopa dina if satser.

$fund = number_format($rad['rate'],2);
Medlem sedan mars 20007 896 inlägg
#4

Oh, mycket snyggare. :)

Medlem sedan juni 20006 031 inlägg
#5

Glömde skriva att man måste konverta till float innan man använder number_format()

$myFloat = (float)$rad['rate'];
$fund = number_format($myFloat,2);
echo $fund;

/red
Har för mig att det funkar, men testa först för säkerhets skull.

Medlem sedan jan. 2007108 inlägg
#6

Grymt!
Visste att de jag gjort inte var så bra. :)

Medlem sedan juni 20006 031 inlägg
#7

Testade nu och upptäckte att konverteringen till float tog bort decimalerna så det alltid blev .00 på slutet.
Använd något sånt här istället:

$myFloat = str_replace(',','.',$rad['rate']);
$fund = number_format($myFloat,2,',','');
Medlem sedan juni 20006 031 inlägg
#8

Du får även justera så du får nummerformateringen som du vill ha den.
t.ex
55112,22
eller
55 112.22
eller
55,112.22

Medlem sedan okt. 200612 inlägg
#9

Om du hämtar värdet från en databas kan du annars skriva
SELECT format(dittvärde,2) from ...

/Alan
Jobbigt.se

Medlem sedan apr. 2008137 inlägg
#10

Pedda skrev:

Glömde skriva att man måste konverta till float innan man använder number_format()

$myFloat = (float)$rad['rate'];
$fund = number_format($myFloat,2);
echo $fund;

Det går alldeles utmärkt att skicka in både int och string till number_format, en av fördelarna med phps lösa typing.

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