Skip to content

Commit 290b9d0

Browse files
Merge pull request #1572 from AgnaldoSilva0/Branch_21158
Padronizado métodos de arredondamento nas classes DFe e NFe
2 parents 8881250 + dbaf397 commit 290b9d0

File tree

4 files changed

+51
-7
lines changed

4 files changed

+51
-7
lines changed

DFe.Classes/Valor.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
using System.Globalization;
1+
using System;
2+
using System.Globalization;
23

34
namespace DFe.Classes
45
{
56
public static class Valor
67
{
78
public static decimal Arredondar(this decimal valor, int casasDecimais)
89
{
9-
var valorNovo = decimal.Round(valor, casasDecimais);
10-
var valorNovoStr = valorNovo.ToString("F" + casasDecimais, CultureInfo.CurrentCulture);
11-
return decimal.Parse(valorNovoStr);
10+
var valorArredondado = decimal.Round(valor, casasDecimais, MidpointRounding.ToEven);
11+
var valorArredondadoFormatado = valorArredondado.ToString("F" + casasDecimais, CultureInfo.CurrentCulture);
12+
return decimal.Parse(valorArredondadoFormatado);
1213
}
1314

1415
public static decimal? Arredondar(this decimal? valor, int casasDecimais)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Collections.Generic;
2+
3+
namespace DFe.Testes.Valores.DadosDeTeste
4+
{
5+
public class ValorDadosDeTeste
6+
{
7+
public static IEnumerable<object[]> ObterValoresDecimaisParaArredondar()
8+
{
9+
return new List<object[]>
10+
{
11+
new object[] { 20.35m * 15.90m, 2 },
12+
new object[] { 0.35m * 15.90m, 2 },
13+
new object[] { 3.665m, 2 },
14+
new object[] { 4.775m, 2 },
15+
16+
new object[] { 20.35m * 15.90m, 3 },
17+
new object[] { 0.35m * 15.90m, 3 },
18+
new object[] { 4.77575m, 4 },
19+
new object[] { 5.445545m, 5 },
20+
};
21+
}
22+
}
23+
}
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using DFe.Testes.Valores.DadosDeTeste;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using NFe.Classes;
4+
5+
namespace DFe.Testes.Valores
6+
{
7+
[TestClass]
8+
public class ValorTesteUnitario
9+
{
10+
[TestMethod(displayName: "Dado um valor e uma quantidade de casas decimais, quando o arredondamento for feito utilizando os métodos da DFe e NFe, então o valor arredondado deve ser igual em ambos os casos")]
11+
[DynamicData(nameof(ValorDadosDeTeste.ObterValoresDecimaisParaArredondar), typeof(ValorDadosDeTeste), DynamicDataSourceType.Method)]
12+
public void DadoUmValorEUmaQuantidadeDeCasasDecimaisQuandoOArredondamentoForFeitoUtilizandoOsMetodosDaDfeENfeEntaoOValorArredondadoDeveSerIgualEmAmbosOsCasos(decimal valor, int casasDecimais)
13+
{
14+
var valorArredondadoDfe = Classes.Valor.Arredondar(valor, casasDecimais);
15+
var valorArredondadoNfe = Valor.Arredondar(valor, casasDecimais);
16+
17+
Assert.AreEqual(valorArredondadoDfe, valorArredondadoNfe);
18+
}
19+
}
20+
}

NFe.Classes/Valor.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ public static class Valor
77
{
88
public static decimal Arredondar(this decimal valor, int casasDecimais)
99
{
10-
var valorNovo = decimal.Round(valor, casasDecimais, MidpointRounding.AwayFromZero);
11-
var valorNovoStr = valorNovo.ToString("F" + casasDecimais, CultureInfo.CurrentCulture);
12-
return decimal.Parse(valorNovoStr);
10+
var valorArredondado = decimal.Round(valor, casasDecimais, MidpointRounding.ToEven);
11+
var valorArredondadoFormatado = valorArredondado.ToString("F" + casasDecimais, CultureInfo.CurrentCulture);
12+
return decimal.Parse(valorArredondadoFormatado);
1313
}
1414

1515
public static decimal? Arredondar(this decimal? valor, int casasDecimais)

0 commit comments

Comments
 (0)