Forums Últimos mensajes - Powered by IBM
 

Precisión decimales

23/03/2007 - 12:43 por AE | Informe spam
Hola a todos,

tenog una aplicación web donde hago un cálculo de porcentaje, más o menos así:

foreach...

int numTareas = listaDatosTareas[numSeries-1].NumeroTareas;
double valor1 = ((double)numTareas / (double)totalNumeroTareas);

string sValor = (Math.Round(valor1, 2)).ToString("p1");
double porcentaje = valor1 * (double)100;

string sPorcentaje = (Math.Round(porcentaje, 2)).ToString();

serie.TituloSerie = "" + sPorcentaje.ToString().Replace(",",".") + "% ";


El caso que obtengo cuatro porcentajes, y hago la suma de ellos y obtengo un
99,99. Quisiera saber si hay manera de obtener la máxima precisión posible
para este caso.

El valor del porcentaje en principio se mostraría con 2 decimales así: 49,17%

Saludos y gracias de antemano.
 

Leer las respuestas

#1 Alberto Poblacion
23/03/2007 - 14:22 | Informe spam
"AE" wrote in message
news:
El caso que obtengo cuatro porcentajes, y hago la suma de ellos y obtengo
un
99,99. Quisiera saber si hay manera de obtener la máxima precisión posible
para este caso.

El valor del porcentaje en principio se mostraría con 2 decimales así:
49,17%



Deberías usar el tipo "decimal" en lugar de "double". El tipo double es
inherentemente impreciso para este fin, ya que guarda el valor en base 10
convertido a base 2, y hay valores que expresados en base 10 tienen un
número finito de decimales pero que al convertirlos a base 2 tienen
infinitos decimales. Como no caben infinitos decimales en el double, los
trunca, y al convertir ese valor de vuelta a base 10 no sale exactamente el
valor inicial. El tipo System.Decimal no tiene este problema, y te dará
valores exactos.

Preguntas similares