Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Convertire prezzo da string in api JSON

    ciao!

    ho creato una API prendendo i record da db.
    volendo fare una cosa precisa, ho fatto il cast dei valori, perchè sennò ottenevo tutti valori string.
    in sostanza:
    Codice PHP:
    $resArray = array();
    $resArray["books"] = array();

    while (
    $row $stmt->fetch(PDO::FETCH_ASSOC)) {
        
    extract($row);
        
    $item = array(
            
    'id' => intval($id),
            
    'title' => $title,
            
    'author_id' => intval($authorId),
            
    'author' => $author,
            
    'editor_id' => intval($editorId),
            
    'editor' => $editor,
            
    'price' => number_format($price2),
            
    'isbn' => $isbn,
            
    'note' => $note,
            
    'scaffale' => intval($scaffale)
        );
        
    array_push($resArray["books"], $item);
    }

    echo 
    json_encode($resArray); 
    l'unico mio problema rimane il campo prezzo.
    sul db è un DECIMAL(6,2).
    cosi come nell'esempio nel JSON esce come stringa.
    codice:
    "price": "6.90",
    se uso intval, mi tronca i decimali.
    se uso floatval mi escono così:
    codice:
    "price": 6.9000000000000004,
    come posso fare??

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,367
    E con printf ?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Quote Originariamente inviata da badaze Visualizza il messaggio
    E con printf ?
    in che senso con printf??
    io quei dati li vedo direttamente nel json con postman (o dal client scritto in react), non l'ho stampati nella pagina.

    cmq ho provato anche facendo così:
    codice:
    'price' => $price + 0,

    e in postman vedo questo:
    codice:
    "price": 6.9000000000000004,

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    760
    Non sono un fan dei cast ma castandolo a float dovrebbe andare, prova:

    codice:
    'price' => (float) number_format($price, 2),

  5. #5
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Non sono un fan dei cast ma castandolo a float dovrebbe andare, prova:

    codice:
    'price' => (float) number_format($price, 2),
    neanche io, però mi sembra più corretto inviare i dati nel "formato" corretto, no??

    cmq ho provato come dici tu, ma il risultato è questo:
    codice:
    "price": 6.9000000000000004,
    ma sinceramente non capisco, percè su db è salvato come 6.90

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    760
    E' strano, a me con il cast funziona correttamente. Senza cast invece me lo inserisce come stringa.
    Sembra quasi che number_format abbia qualche problema.

    Puoi provare a fare un var_dump su $price per vedere se il valore è corretto?

  7. #7
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    2,972
    Provato cosi ?

    number_format((float)$price, 2)

  8. #8
    allora, il var_dump($price) mi da questo (esempio di quel record):
    codice:
    string(4) "6.90"
    in sostanza, quindi, stringhe.

    ho provato anche con number_format((float)$price, 2, ma in questo caso alla fine risulta una stringa.

  9. #9
    per la cronaca, ho provato banalmente anche con un cast inutile nella query:
    codice:
    SELECT
    book_id id,
    title title,
    author.author_id authorId,
    author_name author,
    editor.editor_id editorId,
    editor_name editor,
    CAST(price AS DECIMAL(6,2)) price,
    isbn isbn,
    note note,
    scaffale scaffale
    FROM book
    INNER JOIN author ON author.author_id = book.author_id
    INNER JOIN editor ON editor.editor_id = book.editor_id

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,561
    Potrebbe essere una cosa del genere ?




    https://stackoverflow.com/questions/...issue/43056278
    Ultima modifica di boots; 03-05-2020 a 14:51

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.