2010-04-13 14 views
31

Ho creato un gioco che dà un punteggio alla fine del gioco, ma il problema è che a volte questo punteggio è un numero con molte cifre dopo il punto decimale (come 87.124563563566). Come faccio ad arrotondare il valore in modo da ottenere qualcosa come 87.12?Valori di arrotondamento in alto o in basso in C#

Grazie!

+10

Perché c'è una grande taglia come su una questione come questa? – zxgear

+5

E perché così tanti upvotes su una risposta che arrotonda solo a numeri interi, quando la domanda dà un esempio con due cifre decimali? – CupawnTae

+1

@JohnH Sembra che il poster di taglie abbia fatto baldoria durante la scorsa settimana. – OhBeWise

risposta

36

Provare a utilizzare Math.Round. I vari sovraccarichi consentono di specificare quante cifre si desidera e anche in che modo si desidera arrotondare il numero.

+14

E molto probabilmente vorrai usare 'Math.Round (87.123453563566, 2, MidpointRounding.AwayFromZero);'. –

5
double test2 = 87.2345524523452; 
double test3 = Math.Round(test2, 2); 
84

Usa Math.Ceiling(87.124563563566) o Math.Floor(87.124563563566) per sempre arrotondando per eccesso o per difetto. Credo che questo vada al numero intero più vicino.

+1

Questo è proprio quello che stavo cercando, le funzioni che fanno le stesse funzioni di Excel ROUNDUP e ROUNDOWN. Molte grazie! –

6

Si desidera formattare la stringa, non per corrompere il punteggio.

3

Il numero è valido per il tipo di variabile double e matematicamente corretto.
Hai due soluzioni ben stabilite per evitare tali situazioni.

  1. soluzione stringa: Quando si mostra il numero di utenti, basta farlo: variable.ToString ("0.00"). ToString sta semplicemente tagliando il numero.
  2. soluzione di arrotondamento: Se si desidera controllare l'arrotondamento, è possibile utilizzare la libreria Math.

mi vuoi sapere il motivo per cui si vede questo numero "strano", si può leggere lì: irrational numbers

1

io non ho abbastanza reputazione per aggiungere commenti, quindi devo creare una risposta. Ma il timuride ha ragione, basta formattare la stringa.

Penso che la cosa che stai cercando è:

var myScore = 87.124563563566 
var toShowOnScreen = myScore.ToString("0.00"); 

Alcuni dei modi personalizzati per formattare i valori sono descritti qui: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

0

Un sacco di persone stanno sostenendo si utilizza la matematica libreria per arrotondare il numero, ma anche quello può causare errori di arrotondamento molto piccoli. Math.Round può, e talvolta restituisce numeri con un numero di zeri finali e errori di arrotondamento molto piccoli. Questo perché internamente i float e i double vengono rappresentati come numeri binari e quindi può essere spesso difficile rappresentare alcuni piccoli numeri decimali in modo pulito.

La soluzione migliore è quella di uno solo formattazione uso stringa o, se si vuole che in realtà intorno, combinare le due cose:

Math.Round(val, 2).ToString("0.00") 
8

Per arrotondare sempre fino a 2 cifre decimali:

decimal score = 87.126; 
Math.Floor(score * 100)/100; // 87.12 

per arrotondare sempre fino a 2 cifre decimali:

decimal score = 87.124; 
Math.Ceiling(score * 100)/100; // 87.13 
Problemi correlati