Avatar billede tvilling53 Seniormester
22. oktober 2017 - 18:50 Der er 8 kommentarer

settype

Hej
jeg har denne linie i en funktion
$sum=$data[$i][$rk];echo'<br> HENT_SUM er = '.$sum;
viser et tal med decimaler, men ligeså snart jeg anvender $sum til noget forsvinder decimalerne.
Jeg har prøvet at bruge  settype($sum,"float"); men uden virkning.
Hvad har jeg gjort forkert? eller er der andre muligheder??.
VH Thomas V
Avatar billede Slater Ekspert
22. oktober 2017 - 21:06 #1
Du må nok fortælle mere om, hvad du anvender variablen til, eller give et helt kodeeksempel hvor det ikke virker.
Der er ikke umiddelbart noget i det der, der ikke burde virke.
Avatar billede tvilling53 Seniormester
22. oktober 2017 - 21:23 #2
Hej, her er hele funktionen:

function udregn2($start,$slut,$rk)//udregner total fra kald
    {global $data;
    $total=0;  settype($sum,"float");
    for($i=$start;$i<=$slut;$i++)
      { $sum=$data[$i][$rk];echo'<br> HENT_SUM er = '.$sum;      //*1
        settype($sum,"float");
        echo'<br> SETTYPE_SUM er = '.$sum1;      //*2
        $total=$total+$sum;echo'<br> UDREGN_TOTAL er = '.$total;
      }
     
      if($total===0){$total=0;}
      return $total; 
    }//funtion slut   
*1 her er der decimaler med
*2 her er decimalerne væk
håber at det hjælper
VH Thomas V
Avatar billede cht22 Professor
22. oktober 2017 - 21:37 #3
Du kan evt. prøve:

$sum=(float)$data[$i][$rk];
Avatar billede NielsErikP Mester
23. oktober 2017 - 00:40 #4
*1 kalder du variablen  $sum
*2 kalder du variablen  $sum1
Avatar billede tvilling53 Seniormester
23. oktober 2017 - 14:03 #5
Hej NielsErikP
Det er rigtig at der er en forskel som jeg ikke havde opdaget, men det gør ingen forskel at den bliver rettet.
Til cht22 forslaget har ingen virkning.
Funktionen kaldes med:
        $data[34][3]=udregn2(19,33,3);

function udregn2($start,$slut,$rk)//udregner total til kald
    {  Global $data;
    $total=0; 
    for($i=$start;$i<=$slut;$i++)
      { $sum=$data[$i][$rk];echo'<br> HENT_SUM er = 3484.34;
        settype($sum,"float");
        echo'<br> FLOAT_SUM er =3484;
        $sum=$sum+0;
        echo'<br> SETTYPE_SUM er =3484;
      @ $total=$total+$sum;echo'<br> UDREGN_TOTAL er = '.$total;
      }
      if($total===0){$total=0;}
      return $total; 
    }//funktion slut   
Resultat med settype i anvendelse.

function udregn2($start,$slut,$rk)//udregner total til kald
    {  Global $data;
    $total=0;  settype($sum,"float");
    for($i=$start;$i<=$slut;$i++)
      { $sum=$data[$i][$rk];echo'<br> HENT_SUM er =3484.34;
        //settype($sum,"float");
        echo'<br> FLOAT_SUM er = 3484.34;
        $sum=$sum+0;
        echo'<br> SETTYPE_SUM er =3484;
      @ $total=$total+$sum;echo'<br> UDREGN_TOTAL er = '.$total;
      }
      if($total===0){$total=0;}
      return $total; 
    }//funktion slut   
Dette er resultatet uden settype, så ligeså snart at $sum bruges til noget, forsvinder decimalerne.
Håber at der er nogle gode forslag!!
VH Thomas V
Avatar billede Slater Ekspert
23. oktober 2017 - 14:27 #6
Jeg kan stadig ikke få den fejl til at ske. Decimalerne bliver beholdt alle steder uden at behøve nogen form for casting.

Hvad indeholder den globale variabel $data? Jeg prøver med nogle testværdier, men hvis vi skal nærmere, er vi nok nødt til at have alle informationer.

Hvilken version af PHP kører serveren?
Avatar billede tvilling53 Seniormester
23. oktober 2017 - 14:46 #7
Hej
Windows Version: Windows 7 Home Premium SP1 64-bit
11:10:29  [main]     XAMPP Version: 7.1.8
11:10:29  [main]     Control Panel Version: 3.2.2  [ Compiled: Nov 12th 2015 ]
Jeg bruger NetBeans IDE 8.2
$data[19][3]=800;
$data[20][3]=743.36;
$data[24][3]=335.80;
$data[25][3]=2073,57;
$data[28][3]=-3152.73;
resten af array'et er tomt.
Håber at det er oplysninger nok
VH Thomas V
Avatar billede tvilling53 Seniormester
23. oktober 2017 - 15:30 #8
HEJ,
Fejlen er fundet. Alle talene er hentet fra array der vises på skærmen og er derfor vist med komma i stedet med punktum, hvilket medfører at decimalerne forsvinder når talene manipuleres.
Hvor blind har jeg lov til at være?????
Mange tak for hjælpen.
VH Thomas V
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

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