Como el título describe, tengo un conjunto de objetos, llámalos Asignaciones - que contienen una descripción & un número. Todos los números en el conjunto suman hasta el 100%, pero para fines de visualización a veces redondeo a un porcentaje completo. En algunos casos extremos, al haber redondeado los números, terminé con el 99%.Encuentra el número más alto en un conjunto que se redondeará hacia abajo y en su lugar
Ejemplo:
Description | Actual | Rounded
===============================
Allocation A | 65.23% | 65%
Allocation B | 25.40% | 25%
Allocation C | 7.95% | 8%
Allocation D | 1.42% | 1%
===============================
Total | 100% | 99% (Bad!)
La solución solicitada, que es imperfecta, pero va a hacer, es encontrar la más alta que se debe redondear hacia abajo, y alrededor de ella en su lugar. En el ejemplo anterior, 1.42% se convertiría en 2% cuando se redondea. Editar: Por "El más alto para ser redondeado hacia abajo" me refiero al que se redondea más lejos. De ahí que el 1,42% se redondea hacia abajo en 0,42 mientras que el 65,23 solamente está siendo redondea hacia abajo 0,23
Así que ahora el código, tengo una clase
public class Allocation
{
public string Description {get;set;}
public doubel Percentage {get;set;}
}
Y éstos se llevan a cabo en un IEnumerable<Allocation>
. Entonces, potencialmente usando LINQ, ¿cómo puedo determinar cuál es el que debe redondear? O más específicamente, ¿cómo puedo generar un nuevo IEnumerable<Allocation>
con los números redondeados?
Si alguien tiene alguna otra sugerencia para siempre hacer porcentaje redondeado siempre equivale a 100% que sería aún mejor!
Un comentario sobre los requisitos y el algoritmo: parece que se desea determinar la cantidad de encima o por debajo de 100 sus valores redondeados son, a continuación, ajuste tantos valores como sea necesario por ellos redondeo hacia otro lado. Mientras lo hace, querrá introducir el mínimo error. Por lo tanto, para los datos que proporcionó, la Asignación B debería redondearse porque 42 es el valor fraccionario más alto que se redondeó hacia abajo. ¿Eso suena bien? –
Ah, y permítanme agregar una cosa más: dado que estos son valores financieros mantenidos con dos decimales, debe usar 'decimal', no' doble'. –
La respuesta de Supercat plantea la pregunta de cómo definimos el mínimo error. ¿Nos referimos a un error mínimo absoluto o un error relativo mínimo? –