Visualizzazione risultati 1 fino 21 di 21
Like Tree4Likes
  • 1 Post By mzanella
  • 1 Post By mzanella
  • 1 Post By darbula
  • 1 Post By mzanella

Discussione: feet inches a cm

  1. #1
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito feet inches a cm

    Salve a tutti

    ho questa query per convertire da feet,inches a cm

    mi restituisce il risultato con la virgola, come faccio ad arrotondare?

    Codice PHP:

    SELECT
    he_id
    ,
    cm,
    feet_inch,

    (
    cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48)+
    (
    cast(substr(feet_inch,locate(",",feet_inch)+1) as unsigned)*2.54) AS Centimeters
    FROM
    actor
    INNER JOIN
    height
    ON
    actor
    .actor_id = height.actor_id
    Ultima modifica di blackskyisback : 25-03-2021 alle ore 16.55.33

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Usa ROUND.

    I suggerimenti che do più spesso:


  3. #3
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    arrotonda, ma non come vorrei

    Codice PHP:

    SELECT
    he_id
    ,
    cm,
    feet_inch,

    ROUND (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48)+
    ROUND (cast(substr(feet_inch,locate(",",feet_inch)+1) as unsigned)*2.54) AS Centimeters
    FROM
    actor
    INNER JOIN
    height
    ON
    actor
    .actor_id = height.actor_id


    il 2, 4 e' sbagliato

    2 dovrebbe restituire 158

    4 dovrebbe restituire 163


  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sono i dati nella tabella a essere inconsistenti.
    Alla riga 2, 157.48 dovrebbe essere arrotondato a 158, quindi per eccesso (non per difetto, né all'intero più vicino), mentre alla riga 3, 160.02 dovrebbe essere arrotondato a 160, quindi per difetto o all'interno più vicino (ma non per eccesso).
    Inoltre, leggi bene la documentazione di [url=https://www.w3schools.com/sql/func_sqlserver_round.asp]ROUND[/ur], richiede almeno due parametri, gliene stai passando uno solo.

    I suggerimenti che do più spesso:


  5. #5
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    o letto, ma il problema e che non so dove inserire il secondo numero

    questa e' una query piu' complessa

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Beh, il secondo argomento... va dopo il primo!

    I suggerimenti che do più spesso:


  7. #7
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Beh, il secondo argomento... va dopo il primo!

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Scherzi a parte
    Codice:
    ROUND  (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48)
    diventa
    Codice:
    ROUND  (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48, 0)
    e lo stesso per l'altro pezzo.

    I suggerimenti che do più spesso:


  9. #9
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Scherzi a parte
    Codice:
    ROUND  (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48)
    diventa
    Codice:
    ROUND  (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48, 0)
    e lo stesso per l'altro pezzo.

    non e' cambiato niente


    Codice PHP:

    ROUND
    (cast(substr(feet_inch,1,locate(",",feet_inch)-1) as unsigned)*30.48,0)+
    ROUND (cast(substr(feet_inch,locate(",",feet_inch)+1) as unsigned)*2.54,0) AS Centimeters

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Certo che non è cambiato niente, il problema resta nei dati di partenza, che sono inconsistenti.
    Alla riga 2, 157.48 dovrebbe essere arrotondato a 158, quindi per eccesso (non per difetto, né all'intero più vicino), mentre alla riga 3, 160.02 dovrebbe essere arrotondato a 160, quindi per difetto o all'interno più vicino (ma non per eccesso).

    I suggerimenti che do più spesso:


  11. #11
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    spiegami che cosa significa incosistenti?

    ci sono solo 6 dati memorizzati che vengono prelevati da feet_inch

    gli altri campi visualizzati sono solo per verificare che il tutto funziona correttamente

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Inconsistenti significa che non seguono un (unico) principio coerente.
    In termini pratici: se ti chiedessi quale criterio viene usato per l'arrotondamento tra quelli classici (ovvero per difetto, eccesso o intero più vicino), qualsiasi risposta dessi sarebbe sbagliata.

    Se dicessi "per difetto", andrebbe obiettato che la riga due (157.48) è stata invece arrotondata per eccesso (158), quindi sarebbe sbagliato.
    Se dicessi "per eccesso", andrebbe obiettato che la riga tre (160.02) è stata invece arrotondata per difetto (160), o all'interno più vicino, quindi sarebbe sbagliato.
    Se dicessi "all'intero più vicino", andrebbe obiettato che la riga due (157.48) è stata arrotondata per eccesso (158), quindi sarebbe sbagliato.
    blackskyisback likes this.

    I suggerimenti che do più spesso:


  13. #13
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    quindi non si puo' fare niente

    siamo ritornati al punto di partenza

    ecco le conversioni parziali prese da un sito


  14. #14
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Ho fatto un po' di ricerche, senza esiti positivi, in effetti e' difficile calcolare come arrotondare i risultati nella query, per difetto o per eccesso?, e poi chi determina qual'e' il valore giusto.

    Comunque grazie per il ROUND

  15. #15
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Probabilmente non è il centimetro in più o in meno che fa la differenza. La maggior parte delle persone non sa nemmeno quanto è alta esattamente .
    Direi che puoi scegliere arbitrariamente se arrotondare per eccesso, difetto o all'intero più vicino.
    Spesso le misure col sistema imperiale sono arrotondate al quarto di pollice, quindi tanto vale...
    blackskyisback likes this.

    I suggerimenti che do più spesso:


  16. #16
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    anche perche' con l'eta un pochino ci accorciamo

  17. #17
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    foot = 30.48 //centimetri
    inch = 2.54 //centimetri
    Dovresti calcolarlo solo quando cm è assente.
    Il problema è se il float (virgola mobile) produrrà un output di numero reale spesso è un'approssimazione dovuta alla memorizzazione per motivi di prestazioni e efficienza, cioè varia dal normale sistema di numerazione con cui siamo abituati con il calcolo a virgola fissa.
    155/2.54=61.0236220472 //inch
    155/30.48=5.0853018373 //foot
    5.0853018373*30.48=155.0000000009 // che cosa? Prima avevo 155 :(
    Il round è inutile se non esiste tale certezza, poi il tipo float sinceramente in ogni linguaggio può variare anche tra versione a versione (bug), perché? Sono solo propensi al risultato finale (velocità).
    Ad esempio il bug tcracker di php.net ne è pieno (si spera solo in vecchie versioni php).
    Ultima modifica di darbula : 26-03-2021 alle ore 11.00.12
    blackskyisback likes this.

  18. #18
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    questa e' la formula

    Convert Imperial and US units to Metric units

    Convert height of 5 feet 2 inches to centimeters.

    * First, convert 5 feet to inches: 5 feet × 12 inches/foot = 60 inches
    * Add up our inches: 60 + 2 = 62 inches
    * Convert inches to cm: 62 inches × 2.54 cm/inch = 157.48 cm


    1" (inch) = 2,54cm

    12 inches = 1 foot

    3 feet = 1 yard = 91,44cm

    quindi 6 feet e 3 inches sono : 190,5 cm
    Ultima modifica di blackskyisback : 26-03-2021 alle ore 10.51.11

  19. #19
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    quale sarebbe il codice per convertire in php?

    feet_inch e' memorizzato cosi

    esempio:

    5,1
    5,2
    5,3
    eccc...

  20. #20
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    I problemi di arrotondamento compaiono attorno alla sesta cifra significativa, nel caso delle altezze umane vuol dire che l'errore è al massimo dell'ordine di 10^-5 metri. Un centesimo di millimetro. Credo possiamo conviverci .

    A maggior ragione perché il dato di partenza è quasi certamente affetto sua volta da errore (strumentale). Dubito che una persona sia alta esattamente 5 piedi e 2 pollici, è probabile che ci sia un errore assoluto di almeno qualche millimetro.

    [modalità fisica]
    Se proprio vogliamo ragionare in maniera scientifica (overkill...) andrebbe determinato il numero di cifre significative dei dati di partenza. Considerando che la maggior parte degli strumenti di misura nel sistema imperale ha una sensibilità al quarto di pollice, che ci vogliono dodici pollici per fare un piede, e una persona mediamente non è più alta di 6 piedi (cioè 72 pollici), è possibile esprimere l'altezza in notazione scientifica usando il sistema imperiale. In questo caso 5 piedi e 2 pollici viene reso come 62.00 pollici, o meglio 6.200 * 10^1 pollici. Il numero di cifre significative è quattro.
    Convertendo con la formula mostrata, si otterrebbe 1.5748 * 10^2 cm ma, essendo il numero di cifre significative di partenza 4, questo va arrotondato a 1.575 * 10^2 cm, ovvero 157.5 cm.

    Se, invece, i dati di partenza sono sensibili al pollice anziché al quarto, il numero di cifre significative si riduce a due, e il risultato finale diventa 1.6 *10^2 cm, ovvero 160 cm.

    Sembra controintuitivo, ma è così che funzionano le misure. Non serve a nulla calcolare una misura precisa alla 6 cifra decimale se il dato di partenza non è altrettanto raffinato. Sarebbe come cercare di calcolare esattamente quanti millilitri di benzina servono per andare Roma e Napoli sapendo che la distanza è "circa 450 km", posso anche moltiplicare esattamente 450 per il consumo al chilometro, ma sarebbe un dato approssimato in partenza.
    [fine modalità fisica]

    Morale della storia: arrotonda come vuoi, in concreto non cambia nulla perché stai già lavorando su un dato approssimato.
    Ultima modifica di mzanella : 26-03-2021 alle ore 11.07.11
    blackskyisback likes this.

    I suggerimenti che do più spesso:


  21. #21
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Stai effettuando operazioni tramite stringhe php racchiuse tra apici (singoli o doppi) $num = '5,1'; //sono stringa $num = 5.1; //sono float virgola mobile, posso usare la virgola come separatore decimale se impostato nell'impostazione locale di php ma da php 8 si può solo usare il punto decimale per la creazione di variabile altrimenti comunque potrai utilizzare sprintf e tutte le altre famiglie che mostrano l'output come impostato dalla tua locale.
    Via php non dovrai fare nulla il calcolo (conversione da stringa a sequenza numerica) è via SQL.
    Ultima modifica di darbula : 26-03-2021 alle ore 11.16.51

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •