Avatar billede lefsa62 Seniormester
20. januar 2020 - 08:35 Der er 10 kommentarer

Komma

Hej jeg har et problem med mine tal de skal være separeret med komma eksempel 210,00 og vise det i mit skript er det en som er kvik på det
Avatar billede Rune1983 Ekspert
20. januar 2020 - 09:23 #1
I MySQL kaldet kan du anvende FORMAT(talkolonne,2) as 'TalDecimal'. Det vil giv dig et output resultat med 2 decimaler efter komma.
Avatar billede lefsa62 Seniormester
20. januar 2020 - 09:37 #2
er det i mysql du mener jeg skal angive det du skriver eller? for jeg finder ikke noget som har det navn. lige nu står den på double
Avatar billede Rune1983 Ekspert
20. januar 2020 - 13:56 #3
Eks.
SELECT FORMAT(pris,2) AS 'PrisDecimal' FROM table
Avatar billede arne_v Ekspert
20. januar 2020 - 14:03 #4
Forkert design.

MySQL skal returnere data til applikationen. Kode i applikationen skal formatere data til brugerne.

Så du skal få din PHP/Java/C#/C/whatever kod etil at formatere tal med decimal komma ikke MySQL.
Avatar billede arne_v Ekspert
20. januar 2020 - 14:04 #5
Og husk: der er dødsstraf for at bruge FLOAT og DOUBLE til penge - altid NUMERIC eller DECIMAL.
Avatar billede lefsa62 Seniormester
26. januar 2020 - 10:16 #6
Til arne_v
Det var forkert af mig at sige den står som Double faktisk står den som DECIMAL Men det var der min spørgsmål går ud på hvor i scriptet skal det stå for jeg arbejder i codinigter
Avatar billede arne_v Ekspert
26. januar 2020 - 17:01 #7
Lad mig komme med et eksempel.

Data:


CREATE TABLE decfun (
    id INTEGER NOT NULL,
    x DECIMAL(12,2),
    PRIMARY KEY(id)
);
INSERT INTO decfun VALUES(1, 0.10);
INSERT INTO decfun VALUES(2, 0.20);
INSERT INTO decfun VALUES(3, 0.30);


"normal" kode:


<?php
echo "Get data:\r\n";
$con = mysqli_connect('localhost', 'root', '', 'Test') or die(mysqli_connect_error());
$stmt = mysqli_prepare($con, 'SELECT id,x FROM decfun') or die(mysqli_error($con));
mysqli_stmt_execute($stmt) or die(mysqli_error($con));
$rs = mysqli_stmt_get_result($stmt);
$sum = 0;
while($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) {
    $x = $row['x'];
    echo $x . ' ' . gettype($row['x']) . "\r\n";
    $sum += $x;
}
echo $sum . ' ' . gettype($sum) . "\r\n";
mysqli_stmt_close($stmt);
mysqli_close($con);

echo "Format data:\r\n";
echo $sum . "\r\n";
echo number_format($sum) . "\r\n";
echo number_format($sum, 2) . "\r\n";
echo number_format($sum, 2, '.', '') . "\r\n";
echo number_format($sum, 2, ',', '') . "\r\n";
?>


Output:

Get data:
0.10 string
0.20 string
0.30 string
0.6 double
Format data:
0.6
1
0.60
0.60
0,60

Bedre kode:


<?php
echo "Get data:\r\n";
$con = mysqli_connect('localhost', 'root', '', 'Test') or die(mysqli_connect_error());
$stmt = mysqli_prepare($con, 'SELECT id,x FROM decfun') or die(mysqli_error($con));
mysqli_stmt_execute($stmt) or die(mysqli_error($con));
$rs = mysqli_stmt_get_result($stmt);
$sum = '0.00';
while($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)) {
    $x = $row['x'];
    echo $x . ' ' . gettype($row['x']) . "\r\n";
    $sum = bcadd($sum, $x, 2);
}
echo $sum . ' ' . gettype($sum) . "\r\n";
mysqli_stmt_close($stmt);
mysqli_close($con);

echo "Format data:\r\n";
echo $sum . "\r\n";
echo str_replace('.', ',', $sum) . "\r\n";
?>


Output:

Get data:
0.10 string
0.20 string
0.30 string
0.60 string
Format data:
0.60
0,60
Avatar billede lefsa62 Seniormester
26. januar 2020 - 18:39 #8
Til arne_V

Hej
Kan du tage en kik på denne jeg er ikke sikker men mener det er denne streng fra controlleren
if(!empty($item_nameArr)){
            $j=0;
            for ($i = 0; $i < count($item_nameArr); $i++) {
                if(!empty($item_nameArr[$i])){
                    $item_name = $item_nameArr[$i];
                    $item_price = !empty($item_priceArr[$i])?str_replace(',','',$item_priceArr[$i]):0;
                    $item_qty = !empty($item_qtyArr[$i])?intval($item_qtyArr[$i]):0;;
                    $item_total_price = round($item_price*$item_qty, 2);
                   
                    // Invoice items data
                    $itemData[$j] = array(   
                      'description' => $item_name,
                      'unit_price' => $item_price,
                      'quantity' => $item_qty,
                      'total_price' => $item_total_price
                    );
                    $j++;
                   
                    $totalPrice = ($totalPrice + $item_total_price);
                }
            }
        }

Se om du kan finde hoved og hale i dette
Avatar billede lefsa62 Seniormester
26. januar 2020 - 19:21 #9
Det jeg mete er at det med ,00 skulle være i dette områdehvis du kan se sammenhænget
Avatar billede arne_v Ekspert
27. januar 2020 - 02:48 #10
Nej. Det skal være hvor det faktisk udskrives.

Jeg tror iøvrigt at den kode kunne pyntes en del.
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
Computerworld tilbyder specialiserede kurser i database-management

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