Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Arrotondamento in c#

  1. #1

    Arrotondamento in c#

    ciao a tutti,
    ho un buffo quesito circa gli arrotondamenti in c#:
    vorrei banalmente arrotondare per eccesso dei numeri all'intero + vicino.
    di per se' non rappresenta un problema, la System.math.Round(n) è stata inventata apposta.
    però mi sono reso conto che la round ha una visione del mondo che non coincide con il mio.

    vi allego il risultato di un'operazione fatta nel debug:
    ? System.Math.Round(90.50,0)
    90.0
    ? System.Math.Round(91.50,0)
    92.0
    e questo vale per tutti i multipli di 10!!!
    mi sarei aspettato che arrotondando 90.50 mi risultasse 91 ma cos'ì non accade e non riesco a darmi una spiegazione.

    qualcuno ha qualche suggerimento ?
    Grazie

  2. #2
    È un comportamento normale.

    Se hai un numero del tipo 90.50, questo è esattamente equidistante sia da 90 che da 91, per questo motivo non esiste un verso "giusto" in cui arrotondare. Quindi, quello che spesso si fa (e che fa la System.Math.Round) è arrotondare verso il basso i pari, verso l'alto i dispari, in modo che, a livello statistico, non ci sia un bias in nessuna delle due direzioni.
    In particolare, come specificato nella documentazione, questo metodo è preso dallo standard IEEE 754 (che definisce i metodi normalmente usati per gestire numeri in virgola mobile), citato qui e spiegato qui (assieme ad altri metodi per risolvere l'"empasse dello 0.5").
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

    Moderazione

    Per inciso, i linguaggi .NET hanno una sezione apposita, dove sposto la discussione; in futuro ricordati di postare direttamente nella sezione giusta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    afferrato il concetto ... tutti e 2.
    Per quanto riguarda lo standard IEEE 754 la mie perplessità erano e rimangono. ho trovato conforto in questa soluzione Math.Ceiling() per i positivi e Math.Floor() per i negativi.

    grazie
    ciao

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.