Usa Math.Floor se si vuole arrotondare tha valore, oppure Math.Round se si vuole ottenere un giro esatto. Math.Truncate rimuovere semplicemente la parte decimale del numero, in modo da ottenere risultati negativi per i numeri negativi:
var result= Math.Floor(number * 100)/100;
Math.floor tornare sempre il più piccolo valore integrale che è minore (Piano) o superiore (soffitto) rispetto al valore specificato. Quindi non ottieni un arrotondamento corretto. Esempio:
Math.Floor(1.127 * 100)/100 == 1.12 //should be 1.13 for an exact round
Math.Ceiling(1.121 * 100)/100 == 1.13 //should be 1.12 for an exact round
Preferire sempre la versione di Math.Round che contiene il parametro di arrotondamento del punto medio. Questo parametro specifica come gestire i valori intermedi (5) come ultima cifra.
Se non si specifica AwayFromZero come valore per param, si otterrà il comportamento predefinito, ovvero ToEven. Ad esempio, utilizzando Toeven come metodo di arrotondamento, si ottiene:
Math.Round(2.025,2)==2.02
Math.Round(2.035,2)==2.04
invece, utilizzando MidPoint.AwayFromZero param:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Così, per un arrotondamento normale, è meglio usare questo codice:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
Vuoi arrotondare il decimale stesso o una rappresentazione di testo? –
@Henk, ho bisogno di mostrare il valore come testo, ma preferisco fare l'arrotondamento prima dell'output. È probabile che il valore debba essere inserito successivamente in altri calc. –
possibile duplicato di [Arrotondare un doppio a 2 cifre significative dopo il punto decimale] (http: // stackoverflow.it/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point) – ecatmur