06. april 2005 - 15:02
Der er
25 kommentarer og 1 løsning
Mærkeligt problem. $tal og (int)$tal ikke det samme?
Hej eksperter.. Jeg har en funktion som ændre et tal fx 0.57 til 57. Eller det vil sige, jeg har en funktion, som finder antallet af cifre efter komma: function gang_op($tal) { $ti = 1; $q = strlen(strstr($tal,'.'))-1; for($i=0;$i<$q;$i++) $ti=$ti*10; return $ti; } Hvis man så gør sådan her: $tal = 0.57; //Her returnerer gang_op 100, og $ny_tal bliver 57 $ny_tal = gang_op($tal)*$tal; //Denne viser 56 echo (int)$ny_tal; //Denne viser 57 echo $ny_tal; Hvorfor dette mærkelige problem? Er det fordi jeg har rodet nogle stings rodet ind i det?
Annonceindlæg fra Barco
Slettet bruger
06. april 2005 - 15:56
#1
Hvis du bare skal konvertere fx 0.57 til 57, hvorfor ikke gøre sådan: <?php function myconvert($number) { return (int) substr($number, (strpos($number, ".") + 1)); } ?>
Slettet bruger
06. april 2005 - 16:01
#2
Men ellers burde denne gang_op funktion virke ens med og uden (int) foran: <?php function gang_op($number) { return pow(10, (strlen(strstr($number, '.')) - 1)); } ?>
06. april 2005 - 16:03
#3
Jeg skal bruge de 100 igen senere, derfor var det rart at have et script, som generer tallet 10^("antallet af tal efter komma")
Slettet bruger
06. april 2005 - 16:04
#4
Det gør den jeg skrev 06/04-2005 16:01:21
06. april 2005 - 16:11
#5
Jeps.. Men problemet er der stadigt..: $tal = 0.57; echo $tal; $faktor = gang_op($tal); echo $faktor; $produkt = $faktor*$tal; echo $produkt; echo (int)$produkt; giver 0.57 100 57 56 ???
06. april 2005 - 16:14
#6
Det bliver forresten først rigtigt et problem senere i mit program, hvor jeg skal primfaktor-opløse $produkt. Da gør det nemlig en forskel.. Hvis jeg primfaktor-opløser $produkt får jeg: primfak($produkt); 2, 2, 2, 7.125 Hvilket jo ikke giver mening, med et kommatal.. Men primfaktor-opløser jeg derimod med tallet som parameter får jeg det rigtige: primfak(57); 3, 19
Slettet bruger
06. april 2005 - 16:15
#7
Hvad outputter: <?php $tal = 0.57; $faktor = gang_op($tal); $produkt = $faktor*$tal; var_dumb($faktor); var_dumb($produkt); ?> og hvad sker der hvis: <?php echo gang_op((string) $tal) ?> ?
06. april 2005 - 16:17
#8
var_dumb($faktor); //siger int(100) var_dumb($produkt); //siger float(57)
06. april 2005 - 16:17
#9
echo gang_op((string) $tal); //giver 100
Slettet bruger
06. april 2005 - 16:20
#10
Hvad så med <?php $produkt = (int) $faktor * $tal; var_dumb($produkt); ?> ?
Slettet bruger
06. april 2005 - 16:21
#11
Jeg tror ikke jeg kan hjælpe.. Desværre.. For mig ser tingene rigtige ud.. Beklager :)
06. april 2005 - 16:25
#12
16:20:49 giver ingen forskel.. Øv, altså.. :) Men det er sQ også mærkeligt..
Slettet bruger
06. april 2005 - 16:27
#13
Ja.. Hvilken PHP version bruger du?
06. april 2005 - 16:30
#14
Jeg bruger PHP Version 4.3.2,m men prøvede den lige på in egen maskine hvor jeg bruger PHP Version 5.0.0, og problemet er der stadig..
06. april 2005 - 16:48
#15
function gang_op($number) { return pow(10, (strlen(strstr($number, '.')))); //Hvis man undlader -1 } og laver produktet sådan virker det: $produkt = ($faktor * $tal)/10; mens dette ikke virker: $produkt = ($faktor/10) * $tal; Altså mærkeligt..
06. april 2005 - 16:50
#16
Det er selvfølgelig ikke en holdbar løsning, men det er da mærkeligt..
06. april 2005 - 17:11
#17
Eller dvs. det virkede kun for 0.57.. Tallet 0.5751 giver fx stadig fejl..
06. april 2005 - 18:20
#18
(int) typecaster til heltal ved bare at droppe decimaldelen, brug ciel(), floor(), round() eller (int)($tal*100)/100
Slettet bruger
06. april 2005 - 18:35
#19
I know, men det burde da ikke have effekt når tallet er float 57
06. april 2005 - 19:59
#20
07. april 2005 - 15:22
#21
Jeg har prøvet med round(), floor() og de andre forslag, men det løser ikke mit problem.. Jeg kan ikke gennemskue hvordan jeg løser dette.. :(
07. april 2005 - 15:29
#22
Joh, det virkede sQ alligevel med round(). Mange tak for løsningen bojo.. Hvis du smider et svar, så skal du få pointene.. Hvis du gerne vil have nogle også Gartzen, så kan du også smide et svar ;)
07. april 2005 - 15:32
#23
dette er jo ikke en løsning, men en omgåelse af en fejl i PHP <? function gang_op($tal) { $ti = 1; $q = strlen(strstr($tal,'.'))-1; for($i=0;$i<$q;$i++) $ti=$ti*10; return $ti; } $tal = 0.57; //Her returnerer gang_op 100, og $ny_tal bliver 57 $ny_tal = gang_op($tal)*$tal; $ny_tal=substr($ny_tal,0,strlen($ny_tal)); //Denne viser 57 echo (int)$ny_tal."<br>";; //Denne viser 57 echo $ny_tal."<br>";; ?>
07. april 2005 - 16:25
#24
Det er da en løsning på mit problem ;) Skal jeg så bruge $ny_tal=substr($ny_tal,0,strlen($ny_tal)); eller echo (int)round($ny_tal)."<br>"; da begge to virker..?
07. april 2005 - 16:30
#25
jeg ville så bruge (int)round($ny_tal), men det er vel nærmest en smagssag Nej tak, svar selv og husk at acceptere svaret ;-)
07. april 2005 - 16:37
#26
Okay.. Men i hvert fald tak for hjælpen, anyways :)
Vi tilbyder markedets bedste kurser inden for webudvikling