Avatar billede blaatand Nybegynder
30. december 2009 - 05:26 Der er 10 kommentarer og
2 løsninger

Replace . med ,

Hej eksperter.

Jeg sider med et problem med min webshop, jeg er ved at integrere Ewire i den, ligesom jeg har gjort med paypal. Problemet er bare at Ewire ikke kan fortolke punktum, og derfor helt fjerner det når man klikker sig ind til betaling. Det resulterer at en ordre på 37,00 kr kommer til at koste 3700,00 kr.

Det prøver jeg nu at lave en løsning på!

Koden jeg sider med er ret indviklet og knudret, derfor forsøger jeg at gøre det via. nogle variabler, det er den eneste rigtige måde jeg selv kan overskue det på.

Totalbeløbet på 37.00 ligger i variablen $fSummary. Det jeg prøver er følgende:

$ewireSummary = str_replace(".", ",", $fSummary);
Desværre giver det mig et tomt resultat :(

$ewireSummary = 'Test result: $fSummary';
Giver mig: Test result: 37.00

Så hvor går det galt for mig? Kan man ikke bruge replce på denne måde, eller har jeg en fejl i koden?

På forhånd tak :)
30. december 2009 - 06:29 #1
Morgenstund har guld i mund.

Proever du at bruge str_replace paa noget der ikke er en string? Den foelgende kode giver, paa mit system, 37,25

<?
$fSummary = (string)37.25;
$ewireSummary = str_replace(".", ",", $fSummary);
echo $ewireSummary . "<br/>";
?>

Til gengaeld giver denne kode 37

<?
$gSummary = (string)37.00;
$ewireSummary = str_replace(".", ",", $gSummary);
echo $ewireSummary;
?>
vel sagtens fordi php'en opfatter 37.00 som en integer 37.

Hvis du har en maade at sikre at alle dine tal presenteres som double og saa caster til string saa burde str_replace virke.
Avatar billede blaatand Nybegynder
30. december 2009 - 06:36 #2
Jamen god morgen ;-)

Så hvis man laver således:
$ewireSummary = (string)$fSummary;

så burde det give en string som man kan køre en replace på? Eller hvad mener du?

Jeg tester lige :-)
Avatar billede blaatand Nybegynder
30. december 2009 - 06:50 #3
Nej det fungerer desværre ikke for mig.

Jeg bruger denne kode:
$gSummary = (string)$fSummary;
$ewireSummary = str_replace(".", ",", $gSummary);

Det sjove er, hvis jeg bare skriver 37.00 i stedet for at bruge $fSummary, så virker det sådan set fint nok. Så der er noegt galt med dataen?
Avatar billede blaatand Nybegynder
30. december 2009 - 07:11 #4
Eksempel:

$gSummary = (string)37.00;
$ewireSummary = str_replace(".", ",", $gSummary);

Giver et output på 37 som du siger.

$gSummary = (string)37.50;
$ewireSummary = str_replace(".", ",", $gSummary);

Giver et output på 37,50 ligeledes, og det er jo som det skal være, det ville fungere fint sammen med Ewire!

Hvis man dog bare kunne få den til at gøre det samme når dataen kom fra $fSummary, så var alt godt... :)
30. december 2009 - 08:25 #5
Men jeg tror at vi kom et stykke vej. 

(1) Der er ikke noget galt med din str_replace metode.  Naar du giver den en string der indeholder et "." (jeg kommer tilbage til dette) saa giver den et ",".

(2)  Men str_replace kraever en string, virker ikke med et tal. (Indlysende naar man taenker paa det.)  Saa du skal caste tallet til en string og saa virker det hvis stingen efter cast indeholder et "."

(3)  Hvis du laver en variabel med et tal der indeholder decimaler og decimal-adskillelsen er "paa engelsk" met et "." for eksempel 37.50 saa bliver den castet til "37.50" (og virker saa i str_replace.)

(4)  Men hvis du skriver 37.00 saa betragter php det aabenbart internt som Integer 37 selv om den viser 37.00.  (Det er et gaet men det eneste jeg kan taenke paa.)  Naar du saa prover at caste 37.00 til string saa kaster php sin interne vaerdi 37 til string.  Saa virker din str_replace stadig idet den faar leveret 37 uden "."

Jeg har proevet at lege med at caste 37.00 til double men jeg fandt ingen loesning.

Saa det synes ikke at vaere din Ewire det er galt med.

En hel anden tanke, er der mon indstillinger paa Ewire saa at den opfatter decimal-tal "paa engelsk?"

Jeg vil mene at du har faaet svar paa dit oprindelige spoergsmaal men det giver anledning til to nye spoergsmaal som begge, desvaerre, overstiger min kompetense:  (1)  Hvordan caster man en vaerdi som 37.00 til "37.00" (og giv ovenstaaende kode eksempel til illustration.)
(2  Kan der saettes indstilliger paa Ewire saa den aksepterer 37.00 som et decimaltal.

Jeg opretter dette som et svar (for jeg kommer ikke videre) og jeg foreslaar at du afslutter dette spoergsmaal.  Det er saa din beslutning, i forbindelse med pointsgivning, i hvilken grad mine indlaeg var nyttige (du kan, hvis du synes, selv oprette et svar og dele pointene.)
Avatar billede rude Nybegynder
30. december 2009 - 10:16 #6
Hvilket resultat giver denne her?

$tmp="test".$fSummary."test";
echo "$tmp<br>"; # Skal give test37.00test eller test37test
$tmp=str_replace(".",",",$tmp);
echo "$tmp<br>"; # Skal give test37,00test eller test37test
$tmp=str_replace("test","",$tmp);
echo "$tmp<br>"; # Skal give 37,00 eller 37
Avatar billede tjens Nybegynder
30. december 2009 - 10:25 #7
http://php.net/manual/en/function.number-format.php

konverterer et tal til en string og klarer komma/punktum og antal decimaler i et hug.
Avatar billede blaatand Nybegynder
30. december 2009 - 14:42 #8
@ tjens. Jeg har nu brugt følgende kode:

$english_format_number = number_format($fSummary);
$ewireSummary = str_replace(".", ",", $english_format_number);

Det resulterer i at jeg får et stort fedt 0 der hvor der burde være et tal (37) - Om det er et skridt i den rigtige retning, det ved jeg ikke? Men det virker i hvert fald ikke helt.

@ rude: Jeg prøver lige din kode, men skal lige finde ud af hvor jeg kan plotte det ind, for siden er lidt speciel, og det skal ind de rigtige steder for at den ikke brokker sig over at header er sendt osv osv...
Avatar billede tjens Nybegynder
30. december 2009 - 15:46 #9
#8 Undskyld jeg siger det, men du kunne godt lige bruge 5 minutter på at læse dokumentationen, i stedet for bare at kopiere den første kodelinie.

Men jeg har lavet en demoside, så du kan se hvordan det virker:
http://tjens.dk/eksperten/896836/index.php

Koden ser sådanher ud:
<?php
$nZero = 0;
$nNoDecs = 12345.00;
$n2Decs = 12345.67;
$n3Decs = 12345.678;
$Zero      = number_format( (float)$nZero,  2, ',', '');
$NoDecs    = number_format( (float)$nNoDecs, 2, ',', '');
$TwoDecs  = number_format( (float)$n2Decs,  2, ',', '');
$ThreeDecs = number_format( (float)$n3Decs,  2, ',', '');

echo '<p>Zero: '.$Zero.'</p>';
echo '<p>NoDecs: '.$NoDecs.'</p>';
echo '<p>TwoDecs: '.$TwoDecs.'</p>';
echo '<p>ThreeDecs: '.$ThreeDecs.'</p>';
?>

Og resultatet bliver dette:
Zero: 0,00
NoDecs: 12345,00
TwoDecs: 12345,67
ThreeDecs: 12345,68

Den gør det du har brug for, så du kan glemme str_replace.
Avatar billede blaatand Nybegynder
30. december 2009 - 17:34 #10
Jamen undskyld, jeg prøvede bare koden af for at se om der var anden respons på variablen - Det var der, men værdien bliver 0 i stedet for ingenting - Det er på sin vis et skridt frem, for hvor der før var ingenting har jeg nu et 0 og stå. Så problemet er ikke decimalerne eller om det bliver et punktum eller et komma lige nu. Problemet er at dataen i variablen fSummary ikke kan hentes over i en anden variabel og så så manipuleres til at decimalerne kommer på, eller helt bliver fjernet.

Jeg må på sin vis give Christian ret, det oprindelige spørgsmål er blevet besvaret, det var bare ikke den løsning jeg egentlig skulle bruge for det er ikke der problemet opstår. Problemet opstår ved indholdet af den variabel, fordi der er problemer med at manipulere med den...
Koden du viser i eksempelet her, er som sådan også svaret på det spørgsmål jeg stiller, men egentlig er det ikke det problem jeg har, for det giver ikke det output jeg skal bruge.

Til info, så kan jeg sige at en simpel kode som nedenstående, ikke returnerer noget resultat overhovedet.. ikke engang 0:
$ewireSummary = $fSummary;

Så her står jeg af.

Skal jeg lukke denne og lave et nyt spørgsmål med reference til denne tråd?
Avatar billede tjens Nybegynder
30. december 2009 - 18:34 #11
Ja, hvis hovedproblemet er at finde ordreværdien, og $fSummary ikke er til at stole på, er det nok et nyt spørgsmål der skal til.
Og med visning af noget mere kode i spørgsmålet.


Men det lyder underligt, hvis du har PayPal der virker, og du så ikke kan bruge samme felt til en ny betalingsløsning.
Avatar billede blaatand Nybegynder
30. december 2009 - 20:16 #12
Det er fordi at Ewire ikke accepterer et punktum, den vil have et komma eller slet intet for at give det rigtige beløb. :(

Jeg har oprettet et nyt spm her: http://www.eksperten.dk/spm/896896
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