我已經在vb.net下面的代碼,計算稅前量施加:爲什麼在比較兩個雙打時這個單元測試失敗?
Public Shared Function CalculateRateBeforeTax(ByVal rate As Decimal, ByVal tax As Decimal) As Decimal
Dim base As Decimal = rate/(1 + (tax/100.0))
Return Math.Round(base,2)
End Function
某些方案我設置爲:
速率= 107,稅務= 7%,鹼= 100
速率= 325,稅務= 6.5%,底= 305.16
速率= 215,稅務= 125%,基本= 95.55
我把ABO使用c#和使用nunit測試框架進行一些單元測試。第一個場景通過,但另一個失敗,我不知道如何讓它通過。這裏是我的測試:
[TestFixture]
class TaxTests
{
[Test]
public void CalculateRateBeforeTax_ShouldReturn100_WhenRateIs107AndTaxIs7Percent()
{
decimal expected = 100.0m;
decimal actual = TaxUtil.CalculateRateBeforeTax(107.0m, 7.0m);
Assert.AreEqual(expected,actual);
}
[Test]
public void CalculateRateBeforeTax_ShouldReturn305point16_WhenRateIs325AndTaxIs6point5Percent()
{
decimal expected = 305.16m;
decimal actual = TaxUtil.CalculateRateBeforeTax(325.0m, 6.5m);
Assert.AreEqual(expected, actual);
}
[Test]
public void CalculateRateBeforeTax_ShouldReturn95point55_WhenRateIs215AndTaxIs125Percent()
{
decimal expected = 95.55m;
decimal actual = TaxUtil.CalculateRateBeforeTax(215.0m, 125.0m);
Assert.AreEqual(expected, actual);
}
}
正如我以前說過,第一個測試通過,但其他測試的結果是:
第二個測試預計305.1600000000000003d卻被:305.1643192488263d
第三次測試預計95.54999999999997但是:95.55555555555555557d
對於貨幣,你應該真的使用十進制 – HadleyHope 2011-03-30 15:25:30
[每個計算機科學家應該知道的有關浮點運算](http://portal.acm.org/citation.cfm?id=103163) – Oded 2011-03-30 15:26:41