none
convertir de decimal con decimales a string sin redondear RRS feed

  • Pregunta

  • Hola grupo:

    Quiero convertir un decimal que contiene decimales a string pero sin que me redondee.

    Si tengo lo siguiente:

    Decimal d = 1,345;

    string cad = d.ToString("N2);

    en cad tendia 1,35 (cosa que por otro lado es correcta). Pero no encuentro ningun parametro para el ToString que me devuelva 1,34. El otro problema que tengo que es que no puedo usar un metodo (convertir el decimal a string, contar cuantos caracteres hay detras de la coma, recortar, etc) porque tambien necesito "recortar" el decimal en un datagribview y la unica forma que tengo sin perder la informacion es con la propiedad Format.

    Gracias por adelantado

    jueves, 14 de octubre de 2010 14:35

Respuestas

Todas las respuestas

  • hola

    Decimal d = 1,345;

    string[] partes = d.ToString().Split(",");

    string decimales = partes[1].Substring(0,2);

    decimal resultado = Convert.ToDecimal(string.Format({0}{1}), partes[0], decimales));

    igual aqui siempre contemplo que habra decimales, si detectas que el Length de partes no hace el Split entonces es porque es un valor entero

    tambien podrias suar el decimal.TryParse() para verificar que sea decimal antes de convertir

     

    con respecto al DataGridView por el tipo de formato solo podrias usar el evento CellFormatting

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 14 de octubre de 2010 14:56
  • Leandro, con el código podrias tener un problema si solo hay un decimal.

    Creo que algo asi podria solucionarlo(lo digo de memoria)

    string decimales = partes[1].Substring(0,(partes[1].Length>=2?2:partes[1].Length));


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    jueves, 14 de octubre de 2010 15:01
    Moderador
  • hola jtorrecilla

    si lo imagine, el ejmeplo lo arme solo como una alternativa, que por supuesto hay que adaptar un poco, solo intente mostrar el camino, las validaciones y retoques se agregarian si de esta forma le es util

    por eso tambien aclare si llega a no tener decimales

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 14 de octubre de 2010 15:05
  • Gracias pero no es lo que busco, no me he debido de explicar bien.

    Lo que quiero es una "Cadenas con formato numérico" para poder ponerselo a la propiedad format de un datagridview, y que me recorte un numero sin redondear.

    Ya se que programando puedo convertir el decimal a cadena, recortar, etc. pero eso no lo puedo hacer directamente sobre el datagrid.

    saludos

    jueves, 14 de octubre de 2010 18:55
  • Juanjo_16V revisa este enlace: http://msdn.microsoft.com/es-es/library/fht0f5be(VS.80).aspx a ver si encuentras el formato que deseas.
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    lunes, 18 de octubre de 2010 9:37
    Moderador
  • Hola saludos, mira yo he desarrollado mi propio metodo para poder realizar el de mostrar solo dos numeros despues del punto decimal pero sin redondearlo  yo lo ago de la siguiente forma.

     public string mostrar_dos_decimas(string b)
           {
               string a = ""; int xc = 0; int xc2 = 0;
               for (int i = 0; i < b.Length; i++)
               {
                   if (b.Substring(i, 1) != "." & xc == 0)
                   {
                       a += b.Substring(i, 1);
                   }
                   else
                   {
                       xc = 1;
                       if (xc2 < 3)
                       {
                           a += b.Substring(i, 1);
                       }
                       xc2++;
                   }
               }
               return a;
           }

    Solo le mandas el valor con todo los decimales que yeva, pero el te regresa solo con dos numeros depues del punto decimal y sin redondear,  tienes que mandarle en forma string los valores.  espero te sirva. saludos

    miércoles, 25 de marzo de 2015 6:31