2010-02-20 31 views

risposta

6

Non è possibile. Binary floating point non funziona così. Puoi il formato a doppio senso (ad esempio utilizzando "f4" come stringa di formato), ma se hai a che fare con valori che hanno un numero naturale di posti decimali, allora dovresti probabilmente usare decimal. Potresti darci maggiori informazioni su cosa rappresentano i tuoi valori?

+0

sto facendo una parità tra 2 punti di valori x e ci sono 5.0000 e 4,999,999996 millions e ho bisogno che sia vero –

+0

@Bass: se stai facendo solo un test di uguaglianza, la risposta di nobugz è probabilmente la strada giusta da percorrere. Vorrei comunque considerare se si desidera utilizzare decimal invece - dipende dal tipo di valori che hai. –

3

Non è possibile impostare direttamente il numero di cifre dopo il punto sul doppio.

È possibile modificare la rappresentazione della stringa del doppio utilizzando una stringa di formato.

Un esempio sarebbe:

string.Format("{0:0.####}", number); 

Oppure come sottolinea Jon Skeet:

number.ToString("f4") 
2

Usare questo per confrontare due numeri in virgola mobile a 4 cifre nella frazione:

if (Math.Abs(a - b) < 1E-4) { 
    // close enough 
    //... 
    } 
+0

Se vuoi essere assolutamente sicuro che siano uguali, allora dovrebbe essere Double.epsilon piuttosto che 1e-4. Se vuoi dire che sono 'abbastanza vicino' uguale a quello che hai codice, va bene – zebrabox

+0

Double.Epsilon non può funzionare così com'è, è troppo piccolo. Un epsilon appropriato è qualcosa come un * 1E-15 ma che deve essere incrementato per gli errori accumulati da ciascuna operazione FP. –

Problemi correlati