2010-02-20 9 views

Odpowiedz

6

Nie możesz. Binary floating point nie działa w ten sposób. Możesz format podwoić w ten sposób (np. Używając "f4" jako ciągu formatu), ale jeśli masz do czynienia z wartościami, które mają naturalną liczbę dziesiętnych miejsc, to powinieneś raczej używać decimal zamiast tego. Czy możesz podać nam więcej informacji na temat tego, co reprezentują twoje wartości?

+0

im robi równości 2 punkty i tam x względem wartości są 5,0000 i 4.999999996 i potrzebuję tego. –

+0

@Bass: Jeśli przeprowadzasz test równości, to odpowiedź nobugza jest prawdopodobnie właściwą drogą. Nadal zastanawiałbym się, czy zamiast tego użyć dziesiętnego - zależy to od rodzaju wartości, jakie posiadasz. –

3

Nie można ustawić liczby cyfr po punkcie na podwójnym bezpośrednio.

Możesz zmienić reprezentację ciągów podwójnych za pomocą ciągu formatu.

Przykładem może być:

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

Albo jak Jon Skeet zaznacza:

number.ToString("f4") 
2

to wykorzystać do porównywania dwóch liczb zmiennoprzecinkowych do 4 cyfr we frakcji:

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

Jeśli chcesz mieć absolutną pewność, że są równe, to powinno być Double.epsilon zamiast 1e-4. Jeśli chcesz powiedzieć, że są "wystarczająco blisko" równe, to znaczy, że kod jest w porządku. – zebrabox

+0

Double.Epsilon nie może działać tak jak jest, jest o wiele za mały. Odpowiedni epsilon jest podobny do * 1E-15, ale musi zostać zwiększony o błędy zebrane przez każdą operację FP. –

Powiązane problemy