Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] una domanda su variabile float.. urgente :(

    Sto finendo un progetto di informatica, vorrei sapere perchè quando faccio un controllo di questo tipo:

    if(moneta == 0.1 || moneta == 0.2 || moneta == 0.5 || moneta == 1){


    }

    moneta è un float.
    al momento dell'inserimento dei dati non mi riconosce 0.1 e 0.2 invece 0.5 e 1 li riconosce sempre... c'è qualche motivo in particolare?
    grazie a tutti spero mi rispondete

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Utilizza un double ... eviterai i noti problemi di approssimazione della rappresentazione binaria dei numeri in virgola mobile.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    già provato dà sempre lo stesso problema help me please

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Invece penso che funzioni ... hai modificato le scanf ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    la scanf di una double è diversa da una float?

    scanf("%f",&moneta);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    devi aggiungere una L (per "long")

    scanf("%lf", &moneta);
    every day above ground is a good one

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    (Mi scuso per il doppio post)

    Comunque poiché l'errore dipenda dal fatto che i valori con la virgola vengono interpretati (di default) come double (e quindi se li confronti con una variabile float puoi avere problemi) o modifichi la variabile in un tipo double (come ti ha detto oregon) oppure - se per qualche motivo la vuoi lasciare di tipo float - ti basta fare

    codice:
    if ( moneta == 0.133F || moneta == 0.2F || moneta == 0.5F || moneta == 1F )
    dove la lettera F indica espliclitamente che quei valori vanno letti come float e non come double.
    every day above ground is a good one

  8. #8
    funziona con lf nella scanf... invece mi da questo errore invalid suffix "F" on integer costant se scrivo la condizione così come l'hai scritta... cmq problema risolto grazie mille ad entrambi spero di esservi utile in futuro

  9. #9
    Originariamente inviato da megapeppe
    invece mi da questo errore invalid suffix "F" on integer costant se scrivo la condizione così come l'hai scritta...
    La f deve essere minuscola.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    No la F può essere anche maiuscola (è indifferente). L'errore è sull'ultima condizione che ho scritto:

    == 1F

    perché ovviamente non si può far leggere un intero (1) come float. Bisogna o scrivere 1.F oppure semplicemente togliere la F lì... per il resto funziona.

    Vabbè, comunque il problema è risolto
    every day above ground is a good one

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