Foros del Web » Programación para mayores de 30 ;) » .NET »

Formatear importe a dos decimales pero SIN REDONDEAR

Estas en el tema de Formatear importe a dos decimales pero SIN REDONDEAR en el foro de .NET en Foros del Web. Buenos días desde España Foreros !!! A ver si podéis echarme un cable con algo que me está llevando a tirarme por la ventana... : ...
  #1 (permalink)  
Antiguo 25/04/2013, 02:16
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Formatear importe a dos decimales pero SIN REDONDEAR

Buenos días desde España Foreros !!!

A ver si podéis echarme un cable con algo que me está llevando a tirarme por la ventana... : )

Tengo el siguiente valor:
decimal summary = 199031.39958M;


Lo paso a N2 para formatearlo correctamente y se vea bien en un Informe que estoy mostrando:
string summaryTextN2 = summary.ToString(Consts.N2);

El resultado que obtengo es el siguiente:
"199.031,40"

Cuando realmente debería haber obtenido:
"199.031,39"

¿Alguien sabe que puedo hacer para evitar ese redondeo, por favor?
__________________
Charlie.
  #2 (permalink)  
Antiguo 25/04/2013, 14:52
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Formatear importe a dos decimales pero SIN REDONDEAR

Buenas,

No existe una función así, pero la puedes crear.

Ejemplo sacado de stackoverflow: http://stackoverflow.com/questions/3...thout-rounding

Código C#:
Ver original
  1. public static NumericExtensions {
  2. public static decimal Truncate(this decimal value, int decimalPlaces)
  3.     {
  4.         decimal integralValue = Math.Truncate(value);
  5.  
  6.         decimal fraction = value - integralValue;
  7.  
  8.         int factor = (int)Math.Pow(10, decimalPlaces);
  9.  
  10.         decimal truncatedFraction = Math.Truncate(fraction * factor) / factor;
  11.  
  12.         decimal result = integralValue + truncatedFraction;
  13.  
  14.         return result;
  15.     }  
  16. }



Código C#:
Ver original
  1. string summaryTextN2 = summary.Truncate(2).ToString();
  #3 (permalink)  
Antiguo 26/04/2013, 02:50
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Respuesta: Formatear importe a dos decimales pero SIN REDONDEAR

Muchas Gracias alexg88,

Revisaré lo que me has puesto que parece más elegante que lo mio.

Yo lo solucioné de la siguiente manera:

xrLabel3.Text = summary.ToString("N4").Remove(summary.ToString("N4 ").Length - 2, 2);


Comprobé que al pasar 4 decimales, en vez de dos, no me lo redondeaba, por lo que hice eso, y después quito los dos últimos decimales, para dejarlo en dos (Que es como me lo solicitan)
__________________
Charlie.
  #4 (permalink)  
Antiguo 26/04/2013, 09:00
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Formatear importe a dos decimales pero SIN REDONDEAR

Buenas,

Tu forma no sirve si el número fuese decimal summary = 199031.39998M;

Con tu forma: 199031.40

Con la forma que puse: 199031.39

Un saludo.

Etiquetas: c#
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:54.