2012-06-29 22 views

Respuesta

3

No hay un formato integrado para eso.

Puede obtener la parte fraccional del número y contar cuántos ceros hay hasta que obtenga dos dígitos, y juntar el formato de eso. Ejemplo:

double number = 1.0000533535; 

double i = Math.Floor(number); 
double f = number % 1.0; 

int cnt = -2; 
while (f < 10) { 
    f *= 10; 
    cnt++; 
} 

Console.WriteLine("{0}.{1}{2:00}", i, new String('0', cnt), f); 

Salida:

1.000053 

Nota: El código dado sólo funciona si hay en realidad es una parte fraccionaria del número, y no para los números negativos. Debe agregar cheques para eso si necesita admitir esos casos.

+0

Iba a escribir algo equivalente, simplemente sin un bucle: '-ceil (log (x% 1, 10))' le da el índice del primer dígito distinto de cero directamente (por ejemplo, 'log (0.0002) == -3.69..') – phg

+0

Muy elegante, aprendí algo hoy. – GrayFox374

3

Mi solución sería convertir el número en una cadena. Busque el ".", Luego cuente los ceros hasta que encuentre un dígito distinto de cero, luego tome dos dígitos.

No es una solución elegante, pero creo que le dará resultados consistentes.

1

Pruebe esta función, utilizando parseando para encontrar el # de dígitos fraccionarios en lugar de buscar ceros (funciona para #s negativos también):

private static string GetTwoFractionalDigitString(double input) 
{ 
    // Parse exponential-notation string to find exponent (e.g. 1.2E-004) 
    double absValue = Math.Abs(input); 
    double fraction = (absValue - Math.Floor(absValue)); 
    string s1 = fraction.ToString("E1"); 
    // parse exponent peice (starting at 6th character) 
    int exponent = int.Parse(s1.Substring(5)) + 1; 

    string s = input.ToString("F" + exponent.ToString()); 

    return s; 
} 
Cuestiones relacionadas