Doppio giro in due cifre decimali in C #?


258

Voglio arrotondare il doppio del valore in due cifre decimali in c # come posso farlo?

double inputValue = 48.485;

dopo arrotondare

inputValue = 48.49;

Correlati: c # - Come arrotondare un valore decimale a 2 decimali (per l'output su una pagina)


Prendi nota che non puoi rappresentare tutti i valori in virgola mobile usando double e questo può farti inciampare durante l'arrotondamento
Liam

Risposte:


479

Questo funziona:

inputValue = Math.Round(inputValue, 2);

soluzione alternativa per troncare float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto,

1
Se il valore è 48.0000. Non risulterà 48,00. doppio inputValue = 48,00; inputValue = Math.Round (inputValue, 2); risulterà solo 48. Qualche warkaound?
user1926138,

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
Questo è effettivamente ciò che dovrebbe essere usato. La maggior parte delle operazioni in banche, ecc. Vengono eseguite utilizzando questo metodo (MidpointRounding.AwayFromZero).
MadBoy

41
suggerire che le banche usano il doppio è spaventoso, non usare i valori di approssimazione per la valuta.
raggi,

6
@raggi Temo che alcune (banche) lo facciano ... Ciò spiegherebbe molte cose
SparK

4
Sì, credo che questo sia ciò che è stato realizzato dopo il film "Office Space", completando frazioni di centesimi che nessuno avrebbe notato. Buon punto per stare attenti a quando usare arbitrariamente arrotondamento.
atconway,

1
E come parte della trama di uno dei film originali di Superman, molto tempo fa.
James Westgate,

25

Dovresti usare

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.round

Math.Round arrotonda un valore a virgola mobile a precisione doppia a un numero specificato di cifre frazionarie.

MidpointRounding

Specifica come i metodi di arrotondamento matematico dovrebbero elaborare un numero a metà tra due numeri.

Fondamentalmente la funzione sopra prenderà il tuo valore di input e lo arrotonderà a 2 (o qualsiasi numero specificato) decimali. Con MidpointRounding.AwayFromZeroquando un numero è a metà strada tra due altri, viene arrotondato verso il numero più vicino che è lontano da zero. C'è anche un'altra opzione che puoi usare per arrotondare al numero pari più vicino.


25

Un altro modo semplice è usare ToString con un parametro. Esempio:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Risultato:

54.97

19

Usa Math.Round

value = Math.Round(48.485, 2);

Battimi (anche se aggiungerei anche un punto e virgola;);
Reed Copsey

1
Tuttavia, fai attenzione con MidpointRounding: "Se il valore della prima cifra in valore a destra della posizione decimale delle cifre è 5, la cifra nella posizione delle cifre viene arrotondata per eccesso se è dispari o lasciata invariata se è pari"
Matthias

8

puoi provarne uno dal basso. Ci sono molti modi per farlo.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

Ho usato la quarta opzione. Scrivere F6 ha funzionato per me meglio di scrivere 6 zero ;-)
Maurice Klimek,

2

Usa una stringa interpolata, questo genera una stringa arrotondata per eccesso:

var strlen = 6;
$"{48.485:F2}"

Produzione

"48.49"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.