Avatar billede jangravgaard Nybegynder
27. januar 2003 - 12:01 Der er 12 kommentarer og
1 løsning

automatisk formatering af data

Hej

Jeg har lidt af et problem med udtræk af to datatyper fra Ms Sql. Dataene bliver vist via php 4.3.0 og apache webserver 1.3.26.

Det ene felt : real på fire tegn bliver vist som ex. 0.0 i query manager, men i webbrowser som : 1.3674121863898E-304

Det andet felt : date på 8 tegn bliver vist som ex. 2003-01-22 15:59:34.000 i query manager, men i webbrowseren som : Jan 22 2003  4:04PM

MSSQL server 6.5 på w2k

Er der nogen som har stødt på dette problem før ?
Avatar billede sostack Nybegynder
27. januar 2003 - 12:08 #1
hvad med lidt kode ??
Avatar billede jangravgaard Nybegynder
27. januar 2003 - 12:38 #2
sql strengen ser sådan ud:
SELECT OrderId as NewOrderID,ExternOrderId,CustomerName,CustomerNo,DeliverPlaceName,DeliverPlaceContact,DeliverPlacePhone,DeliverPlaceStreet,DeliverPlaceHouseNo,DeliverPlaceHouseSubNo,DeliverPlacePostalAddress,DeliverPlacePostalNo,DeliverPlaceCountry,ReceivedTimeStatus1,GoodsQuantity,GoodsWeight,GoodsVolume,RegisteredTime,Reference,POD,InternalComment,ContractorId, SupplementaryClaim FROM TransFleet.dbo.Orders Orders WHERE OrderId = '2036421'

jeg henter data med funktionen :

function sql_spoerg_og_faa_svar($query)
    {
      $resultat = mssql_query($query);
      $resultat_array = array();

      if(!$resultat)
      {
        print "Kunne ikke udføre queryen";
      }

      while($raekke = mssql_fetch_array($resultat))
      {
        $resultat_array[] = $raekke;
      }
          return $resultat_array;
      }

jeg unpakker arrayet med koden :

    for ($i = 0; $i < sizeof($picklistearray); $i++)
    {
          extract($picklistearray[$i]);
    }

som giver mig variabler svarende til de valgte fields i min query.
Avatar billede jakoba Nybegynder
27. januar 2003 - 12:46 #3
når du ikke selv formatterer dine værdier vil udskriftprogrammet vælge en formattering. men det valg kan så variere fra program til program.

0.0 og 1.3674121863898E-304 er faktisk den samme værdi. din querymanager bruge blot en 'brugervenlig' regel om at tallet skal afrundes lidt.
Avatar billede jangravgaard Nybegynder
27. januar 2003 - 13:23 #4
okay, har du nogen ideer til hvordan jeg får nogle "pæne" værdier ud, altså formateret efter mit hoved og ikke programmet ?
Avatar billede sostack Nybegynder
27. januar 2003 - 13:28 #5
Du kan formatere din real med:
function formater_tal($real) {
if($eksponent = explode("E-", $real)) { // hvis $real indeholder E-
if($eksponent[1] >= 4) { // hvis tallet efter E- er større end eller lig med 4
                        // snakker vi om 10.000 dele og runder ned.
$real = floor($real);
}
return $real;
}

//sostack
Avatar billede sostack Nybegynder
27. januar 2003 - 13:30 #6
Der mangler lige en tuborg:
function formater_tal($real) {
if($eksponent = explode("E-", $real)) { // hvis $real indeholder E-
if($eksponent[1] >= 4) { // hvis tallet efter E- er større end eller lig med 4
                          // snakker vi om 10.000 dele og runder ned.
$real = floor($real);
}
}
return $real;
}

//sostack
Avatar billede jakoba Nybegynder
27. januar 2003 - 13:42 #7
til tal kan du bruge den indbyggede funktion  number_format
    http://dk.php.net/manual/en/function.number-format.php
til datoer vil jeg anbefale funktionen date
    http://dk.php.net/manual/en/function.date.php
Avatar billede jangravgaard Nybegynder
27. januar 2003 - 14:01 #8
hmm, det ser desværre ikke rigtigt ud til at virke din funktion. Jeg får samme tal ud.
Avatar billede jangravgaard Nybegynder
28. januar 2003 - 11:47 #9
hmm....

Jeg har prøvet følgende med min float variabel

    echo var_dump($SupplementaryClaim);
    echo "<br>";   
    echo intval($SupplementaryClaim,10);
    echo "<br>";
    echo number_format($SupplementaryClaim, 2, ",", ".");
    echo "<br>".$SupplementaryClaim;

som giver dette resultat:

float(1.3674124238904E-304)
0
0,00
1.3674124238904E-304

Jeg skulle gerne have tallet "7799" ud
Avatar billede jakoba Nybegynder
28. januar 2003 - 17:20 #10
function formatterTil7799( $ettal ) {
    return "7799";
}

eller for at sige det på en anden måde:
Hvad forbindelse er der imellem værdien af  float(1.3674124238904E-304)
og værdien af  7799 ?
Avatar billede jangravgaard Nybegynder
29. januar 2003 - 08:14 #11
--> jakoba
nu er jeg ikke så stærk i konvertering af float til integer i hovedet, men jeg forventer det er det samme tal, blot forskellig repræsentation.
kan man ikke lave noget i sql som kan konvertere på db niveau min float til integer, da php'en ikke ser ud til at kunne klare det. ?
Avatar billede jangravgaard Nybegynder
02. februar 2003 - 13:09 #12
lukker spørgsmålet
Avatar billede jangravgaard Nybegynder
04. februar 2003 - 11:40 #13
svaret til begge konverteringer skulle findes i php.ini filen, hhv. mssql.compatability_mode = On
og
mssql.datetimeconvert = off (denne blev tilføjet)
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