none
Imprimir datos numéricos de un arreglo formateado a 3 cifras después del punto RRS feed

  • Pregunta

  • Hola Amigo del Foro,

    He intentado en vano de imprimir datos numéricos procedentes de un arreglo para que estos tomen un número determinado de cifras después del punto; pero, siempre se imprimen una cantidad no deseada de cifras. He probado con:

    string.Format("{0,12:#.00}", arreglo) y con string.Format("{0:0.000}"), sin que al momento haya tenido resultado.

    Agradecería su amable colaboración.

    Saludos.

    Marino Liranzo


    MLiranzo

    jueves, 2 de julio de 2020 18:01

Respuestas

  • Tiene que funcionar si le aplicas el formato a cada número antes de llamar a DrawString:

    e.Graphics.DrawString(datos.DatosCuadroResultados[j,i].Format("#.00"), fgrid, Brushes.Black, 70 + X * i+6, (160+17.2f) + 17.2f * j);

    Esto presume que DatosCuadroResultados es de tipo numérico. Si es de tipo string no lo puedes formatear aquí, habría que aplicarle el formato en el sitio donde calcules los strings para almacenarlos.


    • Marcado como respuesta MLiranzo sábado, 4 de julio de 2020 0:53
    viernes, 3 de julio de 2020 16:05
    Moderador

Todas las respuestas

  • Probá esto:

    arreglo[0].ToString("N3");

    jueves, 2 de julio de 2020 19:02
  • Hola MLiranzo, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que para que la comunidad de foros te pueda asesorar mejor, es necesario que nos compartas el form/code que estas desarrollando. Así la comunidad de este foro podrá ayudarte a corregir errores, sugerir mejoras y resolver dudas. 

    Recuerda que en este foro no se resuelven tareas o proyectos escolares ni se desarrollan códigos en base a enunciados. 

      

      

    Gracias por usar los foros de MSDN.  

      

    Andres Aguilar 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 2 de julio de 2020 20:15
    Moderador
  • string.Format("{0,12:#.00}", arreglo)

    Entiendo que esto es solo un error cometido al plantear la pregunta en el foro y que no lo tienes escrito de esa manera. Si realmente lo tuvieras así no sería de extrañar que no funcione. No puedes aplicar el formato al "arreglo". Hay que formatear individualmente cada uno de los elementos del arreglo, el formato no funciona sobre el arreglo completo.

    Si nos pones aquí cuál es el bucle con el que estás recorriendo los elementos del arreglo para imprimirlos, podemos indicarte cómo hay que corregirlo para que aplique el formato en el sitio adecuado.

    viernes, 3 de julio de 2020 7:11
    Moderador
  • Saludos Amigo,

    Agradezco que se tome su tiempo para tratar de resolver mi problema. 

    Al plantear la solución propuesta me arroja un error. Anexo fragmento de mi código en cuestión:

    // Imprimir los datos del flexgrid frmTabladeResultados
    						for (int j = 0; j < datos.numeroMuros; j++) {
    							for (int i = 0; i < datos.numColTab; i++) {
    								X = 10 + Convert.ToSingle(datos.anchoColTab[i] / 13f);// Ancho de los encabezados a imprimir
    								e.Graphics.DrawString(datos.cabTabRes[i], fCab, Brushes.Black, 70 + X * i, 160);// Texto de los encabezados
    								if (j == 0) {// Linea para limitar el texto de encabezado de los datos
    									Y = 22 + 17.2f * (j);
    									e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y);
    								}
    								Y = 22 + 17.2f * (j+1); // Posicionamiento de cada lineas de texto
    								e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y); // Imprime los grid de la tabla
    								Y1 = 160 + 17.2f * (j + 1); // Posicionamiento de los grid
    								e.Graphics.DrawString(datos.DatosCuadroResultados[j,i], fgrid, Brushes.Black, 70 + X * i+6, (160+17.2f) + 17.2f * j);
    								e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y);
    							}
    						}

    En el código actual los datos se imprimen con cantidad de cifras arbitraria después del punto.

    Saludos,

    Marino


    MLiranzo

    viernes, 3 de julio de 2020 14:06
  • Saludos alberto,

    Es sólo una expresión genérica para plantear la idea. Pido disculpa por no expresar mi pregunta con claridad. Anexo el fragmento de mi código objeto de la pregunta.

    // Imprimir los datos del flexgrid frmTabladeResultados
    						for (int j = 0; j < datos.numeroMuros; j++) {
    							for (int i = 0; i < datos.numColTab; i++) {
    								X = 10 + Convert.ToSingle(datos.anchoColTab[i] / 13f);// Ancho de los encabezados a imprimir
    								e.Graphics.DrawString(datos.cabTabRes[i], fCab, Brushes.Black, 70 + X * i, 160);// Texto de los encabezados
    								if (j == 0) {// Linea para limitar el texto de encabezado de los datos
    									Y = 22 + 17.2f * (j);
    									e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y);
    								}
    								Y = 22 + 17.2f * (j+1); // Posicionamiento de cada lineas de texto
    								e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y); // Imprime los grid de la tabla
    								Y1 = 160 + 17.2f * (j + 1); // Posicionamiento de los grid
    								e.Graphics.DrawString(datos.DatosCuadroResultados[j,i], fgrid, Brushes.Black, 70 + X * i+6, (160+17.2f) + 17.2f * j);
    								e.Graphics.DrawRectangle(p, 65, 155, X * (i + 1), Y);
    							}
    						}

     Saludos,

    Marino



    MLiranzo

    viernes, 3 de julio de 2020 14:15
  • Tiene que funcionar si le aplicas el formato a cada número antes de llamar a DrawString:

    e.Graphics.DrawString(datos.DatosCuadroResultados[j,i].Format("#.00"), fgrid, Brushes.Black, 70 + X * i+6, (160+17.2f) + 17.2f * j);

    Esto presume que DatosCuadroResultados es de tipo numérico. Si es de tipo string no lo puedes formatear aquí, habría que aplicarle el formato en el sitio donde calcules los strings para almacenarlos.


    • Marcado como respuesta MLiranzo sábado, 4 de julio de 2020 0:53
    viernes, 3 de julio de 2020 16:05
    Moderador
  • Hola Alberto,

    Guiado por su sugerencia, implementé mi código haciendo casting a los datos contenidos en mi arreglo para convertirlo de string a float, entonces, aplicando el método Format a los valores convertidos, todo trabaja adecuadamente. Adjunto fragmento de código final.

    //Imprimir los datos del flexgrid Form2
    						float numValue = 0.0f;
    						for(int j = 0; j < datos.numeroMuros + 1; j++) {
    							for (int i = 0; i < datos.numColMasaM; i++) {
    								X = Convert.ToSingle(10 + datos.anchoColMM[i] / 10);
    								e.Graphics.DrawString(datos.cabMasaMuros[i], fCab, Brushes.Black, 100 + X * i, 160);
    								if (j == 0) {// Linea para limitar el texto de encabezado de los datos
    									Y = 22 + 17.2f * (j);
    									e.Graphics.DrawRectangle(p, 95, 155, X * (i + 1), Y);
    								}
    								Y = 22 + 17.2f * (j+1);
    								X1 = 115 + 57 * i;
    								Y1 = 160 + 17.2f * (j + 1);
    								e.Graphics.DrawRectangle(p, 95, 155, X * (i + 1), Y);
    								if(i != 5)
    									numValue = float.Parse(datos.DatosCuadroMasaM[j, i]);
    								e.Graphics.DrawString(string.Format("{0,12:N2}", numValue), fgrid, Brushes.Black, 100 + X * i, (160+17.2f) + 17.2f * j);
    							}
    						}

    Gracias.

    Saludos,



    MLiranzo

    sábado, 4 de julio de 2020 0:52
  • Hola MLiranzo

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

    sábado, 4 de julio de 2020 0:54
    Moderador