Math.Round()

Versione auto-censurata del post decisamente più spontaneo che avevo scritto prima di pranzo in WLW:

Se usate Math.Round() e volete evitare che sia 1.5 che 2.5 vengano arrotondati a... 2 (o, per dirla con un esempio forse più chiaro, se volete evitare che 2.5 venga arrotondato per difetto a 2, mentre 3.5 venga arrotondato per eccesso a 4) allora scegliete una delle versioni in overload che contenga il parametro MidpointRounding ed impostatelo a MidpointRounding.AwayFromZero

UPDATE: Dimenticavo... ovviamente il discorso vale anche per Convert.ToInt32()

Print | posted @ mercoledì 12 settembre 2007 17:40

Comments on this entry:

Gravatar # re: Math.Round()
by Massimo F. at 12/09/2007 21:00

Quello che non mi sono mai spiegato è come Mcrosoft, dopo 6 versioni di VB ed almeno 3 framework .net si ostini a presentare una funzione Round che va per i fatti suoi... Eppure SQL Server è della Microsoft ma il Round funziona bene... Mah misteri...
Gravatar # re: Math.Round()
by Mario Duzioni at 12/09/2007 21:06

Nel mio post "originale", riportavo anche che dipende dal fatto che questo comportamento aderisce allo standard IEEE 754, sezione 4.

Cosa ne pensi io di quello standard (=insieme di caratteristiche PREDEFINITE!!!), è una delle cose che ho censurato. :-)
Gravatar # re: Math.Round()
by Massimo F. at 13/09/2007 11:30

Beh sai, il problema di fondo è che gli standard nascono per essere tali ma spesso falliscono nel loro intento e così diventano esclusivamente dei fallimenti. Un esempio sciocco: se domani io e te proponiamo uno standard per cui la funzione Round torna solo la parte intera del numero decimale (supponendo che non esista tale funzione). Credo che tutti i programmatori di questo mondo, oltre a doversi sviluppare una funzione Round fatta in casa, ci tirerebbero rosari a non finire ;D
Comments have been closed on this topic.