Avatar billede dp2001 Juniormester
25. juli 2004 - 13:46 Der er 6 kommentarer og
1 løsning

Beregning går galt, når double er større end eller lig 1000

I en løkke gør jeg følgende:

$saldo += $beloeb;

Jeg har imidlertid fundet ud af, at hvis værdien er >= 1000, så bliver det opfattet som "1" og kun 1 bliver lagt til.

Hvad kan det skyldes? Skal jeg ligesom man i ASP angiver en Session.LCID, lave noget tilsvarende, så beregningerne bruger DK format?
Avatar billede jakoba Nybegynder
25. juli 2004 - 13:50 #1
Det er ikke en korrekt observation.

Kan du vise lidt kode før og efter så vi kan se hvor $beloeb kommer fra og hvad du bagerfter gør med $saldo.

mvh JakobA
Avatar billede dp2001 Juniormester
25. juli 2004 - 13:51 #2
// Udskriv Posteringer
// ...................

$sql2 = mysql_query("select * from posteringer where kode <> 'S' and kode <> 'O' and kode <> 'E' and aar = ".$HTTP_GET_VARS['y']." Order By dato_insert asc, post_id asc");

$i = 0;
$saldo = 0;

while ($a_row = mysql_fetch_object($sql2))
{
    $i++;
   
    if ($i == 1)
    {
        print "<h4>Posteringer</h4>";
        print "<table width='600px'>";
        print "<tr><th align='left'width='15%'>Dato</th>";
        print "<th align='left' width='10%'>Type</th>";
        print "<th align='center' width='5%'>Medlem</th>";
        print "<th align='left' width='40%'>Tekst</th>";
        print "<th align='right' width='20%'>Beløb</th>";
        print "<th align='right' width='20%'>Saldo</th></tr>";
    }

    $dato_insert = $a_row->dato_insert;
    $kode = $a_row->kode;
    $kodetekst = "";
    $medlem = $a_row->medlem;
    $tekst = $a_row->tekst;
    $fra = $a_row->fra;
    $til = $a_row->til;
    $beloeb = $a_row->beloeb;
    $saldo += $beloeb;
   
    if ($kode == "E")
    {
        $kodetekst = "Saldo";
    }
    elseif ($kode == "I")
    {
        $kodetekst = "Indtægt";
    }
    elseif ($kode == "O")
    {
    $kodetekst = "Ovf.";
    }
    elseif ($kode == "P")
    {
        $kodetekst = "Primosaldo";
    }
    elseif ($kode == "S")
    {
        $kodetekst = "Spil";
    }

    print "<tr>";
    print "<td align='left'>".short_date($dato_insert)."</td>";
    print "<td align='left'>$kodetekst</td>";
    if ($medlem != "SYS")
    {
        print "<td align='center'><a href='medlem.php?id=$medlem'>$medlem</a></td>";
    }
    else
    {
        print "<td align='center'>$medlem</td>";
    }
    print "<td align='left'>$tekst</td>";
    print "<td align='right'>".double_2c($beloeb)."</td>";
    print "<td align='right'>".double_2c($saldo)."</td>";
}

if ($i > 0)
{
    print "</table>";
}
Avatar billede dp2001 Juniormester
25. juli 2004 - 13:56 #3
outputtet:

<h4>Posteringer</h4><table width='600px'><tr><th align='left'width='15%'>Dato</th><th align='left' width='10%'>Type</th><th align='center' width='5%'>Medlem</th><th align='left' width='40%'>Tekst</th><th align='right' width='20%'>Beløb</th><th align='right' width='20%'>Saldo</th></tr><tr><td align='left'>25.07.04</td><td align='left'>Primosaldo</td><td align='center'>SYS</td><td align='left'>Saldo, primo 2002</td><td align='right'>1,000.00</td><td align='right'>1,000.00</td><tr><td align='left'>25.07.04</td><td align='left'>Indtægt</td><td align='center'>SYS</td><td align='left'>Sponsorindtægter - PEW</td><td align='right'>0.50</td><td align='right'>1.50</td><tr><td align='left'>25.07.04</td><td align='left'>Indtægt</td><td align='center'><a href='medlem.php?id=PEL'>PEL</a></td><td align='left'>Gevinst, uge 17 (Expekt.com)</td><td align='right'>152.00</td><td align='right'>153.50</td></table><h4>Expekt-transaktioner</h4><table width='400px'><tr><th align='left'width='15%'>Dato</th><th align='left' width='10%'>Type</th><th align='center' width='5%'>Medlem</th><th align='left' width='50%'>Tekst</th><th align='right' width='15%'>Beløb</th><th align='right' width='15%'>Saldo</th></tr><tr><td align='left'>25.07.04</td><td align='left'>Indtægt</td><td align='center'><a href='medlem.php?id=PEL'>PEL</a></td><td align='left'>Gevinst, uge 17 (Expekt.com)</td><td align='right'>152.00</td><td align='right'>152.00</td></table>
Avatar billede jakoba Nybegynder
25. juli 2004 - 14:28 #4
og hvad er koden i din funktion  double_2c(...) ?
Avatar billede dp2001 Juniormester
25. juli 2004 - 14:43 #5
// formatterer double med 2 decimaler
// ..................................
function double_2c( &$num )
{
$num = number_format( $num, 2 );
return $num;
}
Avatar billede jakoba Nybegynder
25. juli 2004 - 15:39 #6
jep, der er fejlen. det er parameter specifikationen  '&$num'
tegnet '&' fortæller at det er en referenceparameter. dvs at den variabel du giver som parameter kan ændres indeni funktionen. Og det bliver den af linien
    $num = number_format( $num, 2 );
nu e $num ligmed strengen "1,000.00" og når php bagefter prøver at ændre den streng tilbage til at være et tal går det galt. tegnet ',' er ikke lovlig i et tal php skal læse, så der stopper den og alt hvad du får er tallet 1.

lav funktionen om til:
// formatterer double med 2 decimaler
// ..................................
function double_2c( $num ) {          // fjernet '&' tegn
    $num = number_format( $num, 2 );
    return $num;
}

mvh JakobA
Avatar billede dp2001 Juniormester
25. juli 2004 - 17:35 #7
Fedt!

Tusind tak for det.
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

IT-JOB