2010-02-20 19 views

Respuesta

6

No puede. Binary floating point no funciona así. Puede formato un doble de esa manera (por ejemplo, usando "f4" como cadena de formato), pero si se trata de valores que tienen un número natural de decimal lugares, entonces probablemente debería estar usando decimal en su lugar. ¿Podría darnos más información sobre lo que representan sus valores?

+0

estoy haciendo una igualdad entre 2 puntos de valores x e Hay 5.0000 y 4,999999996 y lo necesito para ser cierto –

+0

@Bass: si solo está haciendo una prueba de igualdad, entonces la respuesta de nobugz es probablemente el camino correcto. Sin embargo, aún consideraría si desea usar decimal: depende del tipo de valores que tenga. –

3

No puede establecer el número de dígitos después del punto en el doble directamente.

Puede cambiar la representación de cadena del doble utilizando una cadena de formato.

Un ejemplo sería:

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

O como señala Jon Skeet a cabo:

number.ToString("f4") 
2

utilizar para comparar dos números de coma flotante de 4 dígitos en la fracción:

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

Si quiere estar absolutamente seguro de que son iguales, debería ser Double.epsilon en lugar de 1e-4. Si quiere decir que son "lo suficientemente cerca" iguales, entonces su código está bien – zebrabox

+0

Double.Epsilon no puede funcionar tal como está, es demasiado pequeño. Un epsilon adecuado es algo así como un * 1E-15, pero tiene que incrementarse para los errores acumulados por cada operación de FP. –

Cuestiones relacionadas