using static System.Console;
using System.Collections.Generic;
public class Program {
public static void Main() {
foreach (var item in CalculaPercentuais(377.17M, new decimal[] { 33.0M, 33.0M, 34.0M })) WriteLine(item);
}
public static IEnumerable<decimal> CalculaPercentuais(decimal valor, IEnumerable<decimal> percentuais) {
//decidi não validar se a soma dos percentuais dá 100 porque pode ser que isso não seja obrigatório
var valores = new List<decimal>();
foreach (var percentual in percentuais) valores.Add(decimal.Round(valor / 100.0M * percentual, 2));
var soma = 0.0M;
for (var i = 0; i < valores.Count - 1; i++) soma += valores[i];
valores[valores.Count - 1] = valor - soma;
return valores;
}
}
//https://pt.stackoverflow.com/q/398984/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBQcm9ncmFtIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgewoJCWZvcmVhY2ggKHZhciBpdGVtIGluIENhbGN1bGFQZXJjZW50dWFpcygzNzcuMTdNLCBuZXcgZGVjaW1hbFtdIHsgMzMuME0sIDMzLjBNLCAzNC4wTSB9KSkgV3JpdGVMaW5lKGl0ZW0pOwoJfQoJcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxkZWNpbWFsPiBDYWxjdWxhUGVyY2VudHVhaXMoZGVjaW1hbCB2YWxvciwgSUVudW1lcmFibGU8ZGVjaW1hbD4gcGVyY2VudHVhaXMpIHsKCQkvL2RlY2lkaSBuw6NvIHZhbGlkYXIgc2UgYSBzb21hIGRvcyBwZXJjZW50dWFpcyBkw6EgMTAwIHBvcnF1ZSBwb2RlIHNlciBxdWUgaXNzbyBuw6NvIHNlamEgb2JyaWdhdMOzcmlvCgkJdmFyIHZhbG9yZXMgPSBuZXcgTGlzdDxkZWNpbWFsPigpOwoJCWZvcmVhY2ggKHZhciBwZXJjZW50dWFsIGluIHBlcmNlbnR1YWlzKSB2YWxvcmVzLkFkZChkZWNpbWFsLlJvdW5kKHZhbG9yIC8gMTAwLjBNICogcGVyY2VudHVhbCwgMikpOwoJCXZhciBzb21hID0gMC4wTTsKCQlmb3IgKHZhciBpICA9IDA7IGkgPCB2YWxvcmVzLkNvdW50IC0gMTsgaSsrKSBzb21hICs9IHZhbG9yZXNbaV07CgkJdmFsb3Jlc1t2YWxvcmVzLkNvdW50IC0gMV0gPSB2YWxvciAtIHNvbWE7CgkJcmV0dXJuIHZhbG9yZXM7Cgl9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzM5ODk4NC8xMDE=