Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 10:56 Der er 17 kommentarer og
1 løsning

'kage i sum' ;o)

Jeg har en rækker værdier i et array af varierende størrelse-

***
for ($count=1;$count<=$AntValues;$countw++)  {
echo "Value [".$count."] = ".$value[$count]."<br />";
$total+=$value[$count];
}
echo $total;
***


med første echo linien kan jeg se at $value[$count] indeholde de rigtige decimal tal.

men når jeg kigger på $total til sidst, kan jeg se at den kun har lagt heltallene sammen.
eks. (2.7 + 2.3 + 2.65 = 6)

Her er det at jeg så er kørt fast, nogen som har en genial løsning på dette lille problem ?

Mvh, Michael..

Ps. God Sommer til jer alle..
Avatar billede repox Seniormester
15. juli 2010 - 11:12 #1
for ($count=1;$count<=$AntValues;$countw++)

Er det rigtigt? Er det en tastefejl til eksperten.dk at du har et w i din increment?
Avatar billede Slettet bruger
15. juli 2010 - 11:41 #2
Jeg syntes det er noget rod, men hvis du ikke kan finde andre løsninger, kan du prøve at caste $total til float i dit loop.

(float) $total += $value[$count];
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 11:59 #3
det var en tyrkfejl herinde, jeg undskylder.  ;o)

i scriptet bruger jeg $w i stedet for $count..

klebager..
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 12:11 #4
til Kimsey0:

Har nu forsøgt både med '(float) $total += $value[$count];'
og med en 'settype($total, "float");' i starten af scriptet, men stadig med samme resultat.

'echo "Value [".$count."] = ".$value[$count]."<br />";'
er kun med under testfasen, da jeg undrede mig over at '$total' viste forkert. slutteligt skal processen se således ud..

***
for ($count=1;$count<=$AntValues;$count++)  {
  $total+=$value[$count];
  }
// '$total' overføres herefter til en celle i min MySql
***
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 12:12 #5
Prøv at se forskellen på disse to:

<?php

$a1="7.9";  $a2="7,9";
$b1="7.9";  $b2="7,9";

print $a1+$b1; print "\n";
print $a2+$b2; print "\n";

?>
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 12:19 #6
Erikjakobsen:

Enig, der er . og ,.

men når nu værdien af $value[1]=6.5 både når den tildeles værdien (via en xml parsing) og igen når jeg skriver værdien.

så syntes jeg det er underligt at $total ikke får andet end 6 ?

Kan det skyldes at jeg kører på en dansk php server, og tallene jeg parser kommer fra en amerikansk, og formatet så ikke passer ?
og kan jeg i så fald 'tvinge' skriptet til og tænke amerikansk ?
Avatar billede jakobdo Ekspert
15. juli 2010 - 12:45 #7
Kunne du ikke bruger number_format() eller noget str_replace og erstatte , til . og derefter laver din beregning ?
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 12:52 #8
Hvad skriver det lille script ud på din server?
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 13:47 #9
"15.8 14"
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 13:52 #10
Dvs den lægger "punktum"-tal rigtigt sammen, men "komma"-tal ikke. Det er sådan PHP skal gøre.

Det tyder altså på at du får "komma"-tal i dit array fra din XML-parsning. Men du skriver hele tiden at det er "punktum"-tal. Der er noget, der ikke passer ;)
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 16:27 #11
Har lige tjekket variabel vejen fra xml dokument til $total

og alle er 'punktum'-tal, først i det øjeblik jeg siger

'$total+=$value[$count];'
subsidært
'(float) $total+=$value[$count];'

bliver det til et heltal..

Det er også helt ulogiskt i mine øjne, men tænkte at der jo nok en eller anden derude i kosmos som have haft samme fejl som mig en gnag.  ;o)

(Jeg har tjekket klammer, paranteser, backets og semikolons) ;o)
Avatar billede Slettet bruger
15. juli 2010 - 19:09 #12
Der MÅ være kommaer i dine tal.
- eller også er din PHP "sat op til" dansk tal-format (er det overhovedet muligt ?)

Prøv denne test i dit miljø:
<html><body><?php
function ADD($tal)
    {
    $total = 0;
    $plus = "";
    for ($i=0;$i<count($tal);$i++)
        {
        echo $plus.$tal[$i];
        $plus=' + ';
        $total += $tal[$i];
        }
    echo " = ".$total."<br>";
    }

ADD(array(2.1, 2.2, 2.3, 2.4));
ADD(array("2.1", "2.2", "2.3", "2.4"));
ADD(array("2,1", "2,2", "2,3", "2,4"));
?></body></html>


Hos mig returneres (korrekt):
2.1 + 2.2 + 2.3 + 2.4 = 9
2.1 + 2.2 + 2.3 + 2.4 = 9
2,1 + 2,2 + 2,3 + 2,4 = 8
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 19:19 #13
Hvad er den helt præcise udskrift fra kodestumpen i spørgsmålet? - klippe/klistre.
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 20:13 #14
Jeg har gået og tænkt om den værdi jeg parser fra XML bliver betragtet som "2.19" i stedet for 2.19, altså en streng og det måske er derfor den ikke vil lave matematik på værdien..

Hvis det er tilfældet, skal jeg jo bare fra parsing linien ha konverteret det til en floating værdi med 2 decimaler..
(Programmer fired, Problem solved, case closed)  ;o)

Jeg kigger på det i aften når jeg kommer hjem fra arbejde, ellers
poster jeg hele scriptet samt link til hvordan det ser ud...  ;o(

Foreløbigt tak for hjælpen drenge..

Michael..
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 20:47 #15
Alt fra XML er strenge. Det er det derfor også i det eksempel jeg gav.
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 21:34 #16
dvs. at alt det her bøvl kunne ha været klaret under parsing med en :

$value[$x] = (float)$XMLvalue;

istedet for en

$value[$x] = $XMLvalue;

Fatter stadig ikke hvorfor jeg ikke tog mig tid til og læse både afsnittet med pasing samt XML grundbogen ;o)

Manualer er jo for folk som kan læse uden at bevæge læberne...
Avatar billede erikjacobsen Ekspert
15. juli 2010 - 21:57 #17
Ja og nej. Vi har stadig ikke fået opklaret den opførsel af dit program, som du beskriver. Men prøv gerne med en (float)-konvertering på det sted, og fortæl os hvad der sker.
Avatar billede Aggerholm2620 Nybegynder
15. juli 2010 - 22:59 #18
Hejsa Erik

første forsøg, indsat '(float)' der hvor parseren giver $value[x] sin værdi, og alle decimalerne bliver ført igennem.  lækkert.

Tak for hjælpen.
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

Københavns Professionshøjskole

Nytænkende og agil IT-projektleder

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS

Metro Service A/S

Erfaren IT-supporter

Udviklings- og Forenklingsstyrelsen

Generalister til PMO og strategiimplementering