Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Arrotondare un float

  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    1,929

    Arrotondare un float

    Faccio questo calcolo

    codice:miofloat = miofolat + (miointero * miofloat2);

    come posso arrotondare il risultato a due cifre decimali?
    Ho provato così:

    codice:totale = Math.Round((totale + (qt * pr)), 2);

    ma giustamente mi dice che
    Cannot implicitly convert type 'double' to 'float'.

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,086
    Dim s As Single = 12.34467!
    Dim sr As Single = CSng(Math.Round(s, 2))
    MessageBox.Show(sr.ToString, "Round", MessageBoxButtons.OK, MessageBoxIcon.Information)


    Ma te che usi il c#, hai mai sentito parlare di cast?

    Pietro

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    1,929
    dici così?

    totint = totint + ((float)qt * pr);

    non mi convince.

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,086
    Math.Round restituisce un Double e non può essere messo in un Single

    come non puoi mettere un Long in un Integer

    Il cast è obbligato in Basic, e con maggior ragione in c#
    Pietro

  5. #5
    Utente di HTML.it L'avatar di tekanet
    Registrato dal
    Oct 2001
    Messaggi
    299
    Se ti serve un'approssimazione solo per la presentazione del dato (cioé, se vale 1.2345 vuoi far vedere 1.23 all'utente, a prescindere da quello che succede nel codice) è più idoneo usare la funzione String.Format. Se non erro, tuoDouble.ToString("F2")

    HTH, tK

  6. #6
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    1,929
    aiuto che caos non ci capisco più niente!
    Il calcolo purtroppo mi serve preciso.

    Se il risultato è 13,999999999 deve essere 14,00
    Se il risultato è 12,3 deve essere 12,30
    Se il risutlato è 10 deve essere 10,00
    Se il risultato è 12,346 deve essere 12,35

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,086
    codice:
            Dim s As Double() = {13.999999999, 12.3, 10, 12.346}
            Dim result As String = s(0).ToString("##0.00") & ", " & s(1).ToString("##0.00") & ", " & s(2).ToString("##0.00") & ", " & s(3).ToString("##0.00")
            MessageBox.Show(result, "Round", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Pietro

  8. #8
    Utente di HTML.it L'avatar di tekanet
    Registrato dal
    Oct 2001
    Messaggi
    299
    Ricapitolo un attimo: devi arrotondare, la funzione è Math.Round

    http://msdn.microsoft.com/it-it/libr...ath.round.aspx

    che vuole un decimal o un double. Stai lavorando con dei single (float), perciò io farei tutti i calcoli del caso e alla Math.Round passere il tuo numero castato a da single a double. Questo casting dovrebbe essere "safe" senza farti perdere dati:

    http://msdn.microsoft.com/it-it/library/k1e94s7e.aspx

    Se non erro in C# il DirectCast è (tipo) quindi,
    codice:
    risultato = Math.Round((double)tuoValoreSingle,2)
    HTH, tK

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.