Avatar billede learner Praktikant
21. august 2005 - 13:10 Der er 24 kommentarer og
2 løsninger

lægger tal med decimaler sammen - hvad gør jeg forkert?

Hej, jeg har et udtræk fra db ca således:
while($fdfsd as $beloeb){
$sammen = $sammen + $beloeb;
}
problemet er at $sammen altid bliver et heltal. Altså den fjerner decimalerne af en eller anden grund.

Her har jeg udskrevet hvad der sker:

+ 79,2 = 79
79 + 287,8 = 366
366 + 3,6 = 369
369 + 237,6 = 606

$sammen bliver til 606 som er mega forkert :o)
Hvad dælan gør jeg forkert?

:o)
Avatar billede learner Praktikant
21. august 2005 - 13:16 #1
skal jeg lave den til en int først?
Avatar billede arne_v Ekspert
21. august 2005 - 13:35 #2
brug . fremfor ,
Avatar billede jakobdo Ekspert
21. august 2005 - 13:35 #3
Må jeg spørge hvorfor du ikke bruger sql funktionen SUM()
http://www.w3schools.com/sql/func_sum.asp

Du kunne evt prøve:
while($fdfsd as $beloeb){
$sammen += (float)$beloeb;
}
Avatar billede learner Praktikant
21. august 2005 - 14:25 #4
hvad gør (float) ???
Avatar billede learner Praktikant
21. august 2005 - 14:26 #5
SUM() duer ik i mit tilfælde, men tak for den viden :o)
Avatar billede learner Praktikant
21. august 2005 - 14:46 #6
Jo forresten jeg kan godt bruge SUM() alligevel...
Men kan ik få det til at virke

Her er hvad jeg gør:
$SUM_Query = mysql_query("SELECT SUM(pris) FROM table WHERE id = '$id' AND val = '$val' ") or....
$SUM_array = mysql_fetch_array($SUM_Query);
$alle_regninger_ialt_inkl_moms = $SUM_array["ialt_inkl_moms"];

Hvad gør jeg nu forkert :o)
Avatar billede learner Praktikant
21. august 2005 - 14:47 #7
Prøver lige igen :o)

Jo forresten jeg kan godt bruge SUM() alligevel...
Men kan ik få det til at virke

Her er hvad jeg gør:
$SUM_Query = mysql_query("SELECT SUM(pris) FROM table WHERE id = '$id' AND val = '$val' ") or....
$SUM_array = mysql_fetch_array($SUM_Query);
$pris_ialt_sammen = $SUM_array["pris"];

Hvad gør jeg nu forkert :o)
Avatar billede arne_v Ekspert
21. august 2005 - 14:53 #8
prøv

$SUM_Query = mysql_query("SELECT SUM(pris) AS sumpris FROM table WHERE id = '$id' AND val = '$val' ") or....
$SUM_array = mysql_fetch_array($SUM_Query);
$pris_ialt_sammen = $SUM_array["sumpris"];
Avatar billede learner Praktikant
21. august 2005 - 14:55 #9
ok prøver det lige :o) tak
Avatar billede learner Praktikant
21. august 2005 - 15:04 #10
Nu virker det.
AS sumpris gjorde forskellen!
Det var også rigtigt at der skulle stå . istedet for ,

Smid svar begge to :o)
Og tak for hjælpen :o)

Så er det jeg undrer mig hvordan mine priser som netop er med punktum bliver ændret til komma under udregningen af prisen :o) Underligt at round(x * 5.35, 2) bliver til xx,xx

Jeg undrer mig også over hvorfor 4.40 altid bliver lavet til 4.4 - hvor bliver nullet af :o)

Hvis i vil hjælpe mig med det os, så smider jeg 15 point mere ind. :o)
Avatar billede jakobdo Ekspert
21. august 2005 - 15:06 #11
Du får hermed et svar!
Avatar billede arne_v Ekspert
21. august 2005 - 15:10 #12
det sidste er ikke noget at undre sig over - sådan virker floating point normalt

$x = 4.40;
$xs = number_format($x,2);

vil give dig en string med 2 decimaler
Avatar billede arne_v Ekspert
21. august 2005 - 15:10 #13
det første forstår jeg heller ikke
Avatar billede arne_v Ekspert
21. august 2005 - 15:10 #14
og et svar
Avatar billede arne_v Ekspert
21. august 2005 - 15:10 #15
jakob>

du skal lige ramme den lille cirkel ude til venstre

:-)
Avatar billede learner Praktikant
21. august 2005 - 15:18 #16
vedr: det første forstår jeg heller ikke:
jeg har ændret db fra en varchar til en float og det var måske en af fejlene jeg har gjort :o)

tak for number_format($x,2);
nemt nok :o)
Avatar billede arne_v Ekspert
21. august 2005 - 15:21 #17
VARCHAR er håbløst til beløb som jo er et tal

FLOAT virker måske nok OK, men du kan få sære afrunding fejl

altid NUMERIC eller DECIMAL til beløb !
Avatar billede jakobdo Ekspert
21. august 2005 - 15:27 #18
Her en kommentar!
Avatar billede learner Praktikant
21. august 2005 - 21:29 #19
altid NUMERIC eller DECIMAL til beløb

Hvad skal jeg så vælge i dette tilfælde? :o)
Avatar billede arne_v Ekspert
21. august 2005 - 21:35 #20
NUMERIC eller DECIMAL

:-)
Avatar billede learner Praktikant
21. august 2005 - 21:38 #21
:o) jeg tager DECIMAL så :o)
Avatar billede arne_v Ekspert
21. august 2005 - 21:39 #22
nå ...

i MySQL er de 2 synonymer, så det er totalt ligegyldigt hvilken af de 2 du vælger

DECIMAL(10,2)

er udmærket
Avatar billede learner Praktikant
21. august 2005 - 22:01 #23
Takker jer :o)

Jeg løste ,/. problemet med at sikre at køre gennem number_format($x, 2, ".", ""); før jeg skriver til db

Såe Tusind tak til jer :o)
Avatar billede jakobdo Ekspert
21. august 2005 - 22:29 #24
arne_v et lille spørgsmål, er der en grund til du ikke anbefaler funktionen round(), som jo netop er en afrundings funktion?
Eller er number_format() samme funktion, blot mere flere funktionaliteter?
Avatar billede arne_v Ekspert
21. august 2005 - 22:37 #25
en oplagt mulighed var jo at jeg ikke vidste bedre da jeg ikke er den store PHP guru

men jeg tror faktisk at number_format er bedre i dette tilfælde

round laver float->float

number_format lavet float->string

<?php
$x = 1.2;
print $x . "<br>\n";
print number_format($x,2) . "<br>\n";
print round($x,2) . "<br>\n";
$x = 1.234;
print $x . "<br>\n";
print number_format($x,2) . "<br>\n";
print round($x,2) . "<br>\n";
?>

outputter:

1.2
1.20
1.2
1.234
1.23
1.23
Avatar billede jakobdo Ekspert
22. august 2005 - 08:51 #26
Jeg spurgte også bare! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester