2010-01-16 42 views
8
float f = 0.479f; 
Console.WriteLine(f.ToString("p1")); 

La salida: 47,9%¿Cómo puedo formatear un valor como un porcentaje sin el signo de porcentaje?

¿Qué debería pasar a ToString() con el fin de eliminar el signo de porcentaje para la salida de la siguiente manera:

47,9

EDITAR. Debería haber mencionado que estoy pasando la máscara a un componente de un tercero que hace las cosas con eso. No puedo realizar ninguna acrobacia con los números desafortunadamente. Tiene que ser la máscara que hace el truco.

+0

¿Qué hace su 3er componente con una cadena formateada? ¿limita tu longitud de texto formateada? –

+0

@Rubens Porque simplemente proporciona una propiedad .FormatString que toma esta máscara. Todo el formateo se realiza por el control de terceros. – AngryHacker

+0

¿Puedes crear un nuevo NumberInfoFormat? Si es así, verifique mi publicación editada. – keyboardP

Respuesta

9

debería haber mencionado que yo soy pasar la máscara a una tercera parte componente que hace su cosa con ella. No puedo realizar ninguna acrobacia con los números desafortunadamente. Tiene para ser la máscara que hace el truco.

así que supongo que le pegan con Float.ToString(String), y que sólo no puede editar el p1 en f.ToString("p1"). Ahora que es complicado. Si no tiene miedo de romper algo relacionado con los cambios implicados, puede hacer lo siguiente:

El formato numérico "P", como se documenta On MSDN, usa NumericFormatInfo.PercentSymbol para escribir el signo "%". NumericFormatInfo es un miembro de su actual CultureInfo. Lo que podría hacer, es clonar su CurrentCulture, y modificar el PercentSymbol a "" como la siguiente:

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      float f = 0.479f; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9% 

      CultureInfo ci = CultureInfo.CurrentCulture.Clone() as CultureInfo; 
      ci.NumberFormat.PercentSymbol = "";    

      System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 

     } 
    } 

Este sería el camino a seguir si no desea alterar la llamada ToString.

+0

+1, parece ser el método más confiable en el escenario OP; tal vez deberá modificar la cultura actual directamente y restablecer su valor predeterminado después de esa llamada a un componente de terceros. –

2

podría intentar

Console.WriteLine(f.ToString("p1").Replace('%',' ')); 

O, si quieres que no quieren un espacio, utilice Replace('%','\0')

EDIT: Si sólo se puede utilizar el método ToString(), se puede crear un objeto NumberFormatInfo, establecer el símbolo de porcentaje debe estar en blanco y pasarlo al método. (NumberFormatInfo está en el espacio de nombre System.Globalization) p.

NumberFormatInfo myNewFormat = new NumberFormatInfo(); 
    myNewFormat.PercentSymbol = ""; 

    float f = 0.479f; 

    Console.WriteLine(f.ToString("p1",myNewFormat)); 
+2

Para puntos de globalización adicionales, use 'NumberFormatInfo.CurrentInfo.PercentSymbol' en lugar de cablear el símbolo'% '. (¡No tengo idea de si alguna de las culturas .NET * en realidad * usa un símbolo diferente!) Algunas culturas también colocan un espacio entre el número y el símbolo '%' (vea 'NumberFormatInfo.PercentPositivePattern') para que también pueda desea realizar un Trim después de hacer esto o se quedará con un espacio inicial o final. – itowlson

+0

+1 - ¡Buen punto! – keyboardP

4
Console.WriteLine((f * 100).ToString("0.0")); 
2

¿Qué tal el siguiente?

Console.WriteLine((f * 100).ToString("F1")); 

e.g. f = 0.4792 -> "47.9"

Se encuentra disponible una lista y descripciones del formato numérico estándar here on MSDN, en caso de que ayude.

Cuestiones relacionadas