Funzione matematica per arrotondare i valori a 0 o 0,5

Come posso arrotondare i numeri all’intero più vicino o alla metà più vicina?

Per esempio:

> 23.15 --> 23.5 > 23.56 --> 24.0 

Le funzioni di arrotondamento che conosco sono floor e ceil , ma quelle solo intorno al numero intero più vicino.

Vuoi arrotondare, a un multiplo di 0,5? Lo capisco correttamente?

 double RoundUpToPointFive(double d) { return Math.Ceiling(d * 2) / 2; } 

Il modo rapido e sporco:

Moltiplicare per 2, massimale e dividere per 2. Veloce e facile da capire, ma questo fallirà nei casi limite a causa dell’overflow del numero.

Un metodo più efficace consiste nel tagliare tutto prima del decimale prima di valutare il round con il metodo sopra riportato e aggiungere il risultato all’intero numero che hai interrotto.

Perché non provare questo, con qualsiasi significato tu voglia nella precisione:

 public double Ceiling(double value, double significance) { if ((value % significance) != 0) { return ((int)(value / significance) * significance) + significance; } return Convert.ToDouble(value); } 

Uso:

 var d1 = Ceiling(23.15, 0.5); // 23.5 var d2 = Ceiling(23.56, 0.5); // 24.0 

Questa funzione di Ceiling è utilizzata da Microsoft Excel e per abbinare questo calcolo ho ideato questo algoritmo.

Riferimento: funzioni Ceiling e Floor come Microsoft Excel in .NET

Il metodo di David praticamente lo sigilla, ma qui c’è un altro modo più lungo.

 double dbNum = 3.44; double dbNumModified = 3.44 + 0.5; dbNumModified = Math.Floor(dbNum); if(dbNumModified < dbNum) { dbNumModified += 0.5; } return dbNumModified;