ARREDONDAMENTO DE NUMERO

MARCELOKROL 22/12/2016 14:04:03
#469947
Boa tarde
Estou com um problema que também é uma duvida.
Vamos lá, por exemplo o numero decimal 15,92485
usando a classe Math para fazer o arredondamento para 2 casas ela me retorna 15,92
  decimal t = Math.Round((decimal)15.92485, 2); 


Não teria que me retornar 15,93?

A duvida surgiu apos um cliente reclamar que as notas fiscais não estavam sendo autorizadas, pois a diferença entre o valor passado e calculado era de R$0,01, ou seja, eu mando R$15,92 (usando o Round) e o sefaz retorna que teria que ser R$15,93
LVFIOROT 22/12/2016 15:57:21
#469959
Resposta escolhida
nao sei porque, mas talvez isso ajude

public decimal Arredondamento(decimal valor, int casas) {
for (int i = ((valor - Math.Truncate(valor)).ToString().Length - 2); i >= (casas); i--)
valor = Math.Round(valor, i, MidpointRounding.AwayFromZero);
return valor;
}
private void Form1_Load(object sender, EventArgs e)
{
var t = Arredondamento((decimal)15.92485, 2);
}
JABA 22/12/2016 21:31:52
#469983
Matematicamente falando, o arredondamento se baseia no primeiro número que ficou para trás. Por exemplo, o seu número é 5.92485, como você quer arredondar para duas casas decimais apenas, o primeiro número após isso é o 4, e por ele ser menor do que 5, o arredondamento é feito para baixo. Se ele fosse maior do que 5, certamente o arredondamento seria 5.93. Se sua intenção é sempre arredondar pra cima, utilize o Math.Ceil

pt.stackoverflow.com/questions/815/como-fa%C3%A7o-para-arredondar-n%C3%BAmeros-para-o-inteiro-mais-pr%C3%B3ximo
Tópico encerrado , respostas não são mais permitidas