我在格式化金额时使用以下内容来放置小数位,但在使用25000测试时却得不到正确的金额,我期望为25000.00
但我得到25000。
我在做什么错?我应该如何改变?
[TestCase(123.45453, 123.45, 2)]
[TestCase(125.55453, 125.55, 2)]
[TestCase(125.55653, 125.56, 2)]
[TestCase(125.56554, 125.57, 2)]
[TestCase(25000,25000.00,2)]
public void MyRoundFunction_returns_amount_with_decimal_places(decimal amountToTest, decimal expected, int decimalPlaces)
{
decimal actual = MyRoundFunction(amountToTest, MidpointRounding.ToEven, decimalPlaces);
Assert.AreEqual(expected, actual);
}
public static decimal MyRoundFunction(decimal value, MidpointRounding midpointRounding, int decimalPlaces)
{
return Math.Round(value, decimalPlaces, midpointRounding);
}
编辑:
如果您要格式化一个十进制值,则即使25000之类的值,总金额也将始终具有2个十进制,并且您希望25000.00或1234.224543返回1234.22,您将如何编码?
最佳答案
在我看来,您正在传递双精度值而不是小数。尝试这个:
[TestCase(123.45453m, 123.45m, 2)]
[TestCase(125.55453m, 125.55m, 2)]
[TestCase(125.55653m, 125.56m, 2)]
[TestCase(125.56554m, 125.57m, 2)]
[TestCase(25000m, 25000.00m,2)]
这甚至可能无法建立-如果CLR不知道
decimal
值在属性中被禁止,我不会感到惊讶。如果确实发生了这种情况,则可能需要将输入更改为字符串,在测试开始时将其解析为小数,然后进行比较。当然,您需要检查decimal.Parse
是否保留尾随数字……我认为可以,但是我确实记不清。其他人指出了“仅在显示时才转换为字符串时的回合”的可能性-我不能说这是否适合您的情况。我知道25000m和25000.00m之间存在表示差异。当然,是否应舍入到给定的小数位数将取决于您的业务需求。
关于c# - 格式化2位小数。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7203678/