Avatar billede dalixam Nybegynder
23. juni 2006 - 16:56 Der er 8 kommentarer

Matematik med tal og decimaler

Jeg er ved at blive lettere skør over dette problem. Jeg kan ikke få php til at regne et regnestykke ud, hvis nogle af tallene inderholder decimaler og tusinde-seperator. F.eks:

$price1 = "1.499,50";
$price2 = "99,00";

$newprice = $price1-$price2;

echo $newprice

Giver noget i retning af -97.501.... Kan nogen hjælpe :)
Avatar billede gizmo-gizmo Nybegynder
23. juni 2006 - 17:07 #1
PHP forstår ikke dansk ;)  et punktum betyder komma (og ikke en tusindtalsseparator).
Dvs. den ser det som:
99-1,499 = 97,5
Avatar billede gizmo-gizmo Nybegynder
23. juni 2006 - 17:27 #2
Det burde hedde:

$price1 = 1499.50;
$price2 = 99.00;
$newprice = $price1 - $price2;
Avatar billede larsroan Nybegynder
23. juni 2006 - 17:32 #3
Gizmo-gizmo, vil du hjelpe meg lidt til med den bomulds-index'en i Kina?  I så fall kan du gjerne ta en tidt om en halv time under Script >PHP og tema "problem med array".

Dalixam, du får -97.501 fordi du udfører regnestykket 1,49950-99  dvs -97,...
Følg Gizmo's anbefalinger!
Avatar billede dalixam Nybegynder
23. juni 2006 - 21:02 #4
Tak for svaret Gizmo, men når nu tallet ER 1.499,50, hvad gør man så? :)
Jeg kan selvfølgelig bruge str_replace og fjerne punktummet og lave komma til punktum, men hvad så bagefter? Hvordan får jeg sæt komma før decimalerne igen på resultatet og punktum som tusinde-seperator? (Hvis tallet er over 999,99)
Avatar billede wetdog Nybegynder
23. juni 2006 - 21:22 #5
Hej

du kan se lidt nærmere på funktionen number_format()
Avatar billede larsroan Nybegynder
24. juni 2006 - 11:56 #6
Det som er problemet er at dine tal er 'strings'.  Et alternativ er å slette punktum og so replace komma med punktum - som php benytter som decimaltegn. Og så foreta utrekningene med decimal-tal.  Men en snarvei for skandinavisk tall-format og foreta utrekninger med 'strings' direkte er desse funksjonene:

<?php
$price1 = "1.499,50";
$price2 = "99,00";
echo gettype($price1)."<br/>"; // her kan du se at det er 'strings' du opererer med
function str2no($number){
  $number = str_replace(".", "", $number);
  $number = str_replace(",", ".", $number);
  return $number;
}
function no2str($number){
  $number = number_format($number,2, ',', '.');
  return $number;
}
echo no2str(str2no($price1)-$price2)."<br/>";

?>
Avatar billede larsroan Nybegynder
24. juni 2006 - 12:02 #7
De to echo-kommandoene gir deg:
string
1.400,50

Med dette får du decimalerne igen på resultatet og punktum som tusinde-seperator - som du vil.
Avatar billede dalixam Nybegynder
25. juni 2006 - 18:30 #8
Tusinde tak for hjælpen.
Smid et svar så får du point :)
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