ARREDONDAMENTO DE NUMERO
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
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
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
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);
}
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);
}
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
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