Visualizzazione dei risultati da 1 a 6 su 6

Discussione: semplice sottrazione

  1. #1

    semplice sottrazione

    Per alcune attività devo fare in modo di sottrarre la parte intera con la parte decimale ma
    non capisco come mai se faccio 25.99-25 mi viene 0.99 e se faccio 110.99-110 viene 0.98999999999999 …. Porque?

    Non riesco proprio a spiegarmelo questo comportamento strano?





    echo "


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


    ";
    echo $cifra=25.99;
    if (is_float($cifra)){
    $numeroIntero=intval($cifra);
    echo "

    ";
    echo"sottrazione".$cifra."-".$numeroIntero;
    $decimali=($cifra-$numeroIntero);
    echo"
    risultato ".$decimali."

    ";
    }

    echo "


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


    ";
    echo $cifra=110.99;
    if (is_float($cifra)){
    $numeroIntero=intval($cifra);
    echo "

    ";
    echo"sottrazione".$cifra."-".$numeroIntero;
    $decimali=($cifra-$numeroIntero);
    echo"
    risultato ".$decimali."

    ";
    }

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, il calcolo e' giusto:

    25.99-25 è 0 99, altrimenti dovrebbe essere 25.99-0.99 che farebbe 25

    Se devi arrotondare puoi usare ceil() o floor()

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Sembrerebbe un piccolo bug, ho testato in locale ed è vero non da 0.99 ma 0.98999999999999

    Comunque arrotonda come ti ha detto marco




    Ps: puoi usare anche round()

  4. #4
    A me invece entrambi i risultati sono corretti.

    Però ho PHP ver. 5.2.11
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da satifal
    A me invece entrambi i risultati sono corretti.

    Però ho PHP ver. 5.2.11
    Io ho provato con la 5.4.1 (natty) e lo dava sbagliato

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Spesso si pensa che PHP sia privo di tipi di dato e che le sue variabili siano dei calderoni informi in cui mettere di tutto, ma non è così.

    In questo caso stai utilizzando implicitamente il tipo float o double di PHP in cui è normale la perdita d'informazione. Stiamo parlando di numeri in virgola mobile rappresentati tramite codifica IEEE754. Non dimentichiamo che i numeri reali tra 0 e 1 sono infiniti, pertanto è ovvio che non sia possibile rappresentarli tutti come sequenza binaria a 64 bit pur avendo una buona approssimazione.

    Float o Double

    o leggi il warning di php.net

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.