断言两位小数时出错

时间:2014-08-07 15:57:53

标签: c# decimal assert

任何人都可以帮助我理解,因为预期值和实际值在ToString()方法中有不同的结果。当我为我打开手表时它是相同的值。

由于

代码:

    [TestMethod]
    public void SerializeDecimalWithTwoDecimals()
    {
        var expected = decimal.Round(1.00M,2);
        var actual = decimal.Round(1M,2);

        Assert.AreEqual(expected.ToString(), actual.ToString());
    }

2 个答案:

答案 0 :(得分:5)

基本上不要相信Watch窗口。它可以用值的字符串表示来玩愚蠢的游戏。这两个值相等(expected == actual将为真),但它们不相同 - 保留尾随零。

在这里,Round方法实际上并没有改变这些值,所以你有效地得到了:

var expected = 1.00m;
var actual = 1m;

Assert.AreEqual(expected.ToString(), actual.ToString());

...而1.00m.ToString()是" 1.00",而1m.ToString()是" 1"。

答案 1 :(得分:3)

Microsoft C#文档:

  

缩放因子还会保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中的十进制数的值。但是,如果应用了适当的格式字符串,则ToString方法可能会显示尾随零link