Avatar billede dp2001 Juniormester
02. marts 2005 - 16:45 Der er 7 kommentarer og
2 løsninger

Beregning med decimaltal

Hej

Store problemer ifb. med beregninger med decimaltal.

Nedenstående eksempel returnerer värdien "8.00" for Result 2. Nogen god forklaring hvorfor?

--------------------------------

<?php
$o1 = 11.11;
$o2 = 22.22;
$o3 = 33.33;
$result = number_format(($o1 * $o2 * $o3),2);
$result2 = number_format($result,2);

print "<pre>Result is: $result</pre>";
print "<pre>Result 2 is: $result2</pre>";

?>
Avatar billede dp2001 Juniormester
02. marts 2005 - 16:46 #1
outputtet:

Result is: 8,227.98

Result 2 is: 8.00
Avatar billede detox Nybegynder
02. marts 2005 - 17:01 #2
Ja, det første resultat er jo fint nok, men det andet dur ikke da den forventer et float tal som input. Hvad er det du vil opnå?
Avatar billede detox Nybegynder
02. marts 2005 - 17:02 #3
En dansk udgave vil være:

$result = number_format(($o1 * $o2 * $o3),2,',','.');
Avatar billede coderdk Praktikant
02. marts 2005 - 18:10 #4
Forklaringen er at den første producerer strengen (ikke tallet) "8,227.98" - I den næste prøver PHP så at konvertere strengen til et tal, dette gør den indtil den finder et tegn der ikke er et tal, f.eks.:

$x = "10hejsa";
echo $x+1; // Skriver 11
Avatar billede dp2001 Juniormester
02. marts 2005 - 22:28 #5
Det jeg gerne ville opnå, var at jeg kunne lave nogle mellemberegninger - og sidenhen bruge variablen som input til en anden beregning.

I ledte mig begge på sporet, så det bliver til pointdeling.

Takker mange gange for hjælpen!

Løsningen blev....



<?php
// Skær alle decimaler væk, hvis gevinsten er ved Tipstjenesten (modsat Expekt.com)
function gev_2c($udbyder,$tal)
{
    if ($udbyder == "Tipstjenesten")
    {
        $tal = (int)$tal;
    }
    else
    {
        $tal = (double)sprintf('%.2f',$tal);
    }
   
    return $tal;
   
}

// Trunker alle decimaler efter 3. led, hvis Tipstjenesten
function trunc_2c($udbyder,$tal)
{
    if ($udbyder == "Tipstjenesten")
    {
        $tal = (double)sprintf('%.2f', (int)($tal*100)/100);
    }
    else
    {
        $tal = (double)sprintf('%.2f',$tal);
    }
    return $tal;
}

$udbyder = "Tipstjenesten";
$o1 = 11.12;
$o2 = 22.23;
$o3 = 33.34;
$indsats = 10;
$result = trunc_2c($udbyder,($o1 * $o2 * $o3)) * $indsats;
$result2 = gev_2c($udbyder,$result);

print "<pre>Udbyder er $udbyder";
print "<br/>Odds 1 er $o1<br/>Odds 2 er $o2<br/>Odds 3 er $o3";
print "<br/>'Reel' gevinst ville have været: $result";
print "<br/>Faktisk gevinst er: $result2</pre>";

$udbyder = "Expekt.com";
$o1 = 11.12;
$o2 = 22.23;
$o3 = 33.34;
$indsats = 10;
$result = trunc_2c($udbyder,($o1 * $o2 * $o3)) * $indsats;
$result2 = gev_2c($udbyder,$result);

print "<pre>Udbyder er $udbyder";
print "<br/>Odds 1 er $o1<br/>Odds 2 er $o2<br/>Odds 3 er $o3";
print "<br/>'Reel' gevinst ville have været: $result";
print "<br/>Faktisk gevinst er: $result2</pre>";

?>
Avatar billede dp2001 Juniormester
02. marts 2005 - 22:28 #6
Jeg skal sføli lige bruge svar fra de 2 herrer...
Avatar billede coderdk Praktikant
02. marts 2005 - 22:31 #7
Yessir!
Når du nu laver odds osv, kan det være du kan bruge dette til noget: http://eksperten.dk/spm/563938
Avatar billede detox Nybegynder
02. marts 2005 - 22:33 #8
yes yes
Avatar billede dp2001 Juniormester
02. marts 2005 - 22:36 #9
Takker endnu engang.

coderdk - tak for linket. Kan være jeg kan bruge det en skønne dag, men indtil nu kører vi efter et andet system (mere simpelt).

Er ved helt at omkode vores hjemmeside oddsrus.dk fra ASP til PHP (rocks).
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