我正在编写计算优惠多席选举的软件.一个常见的要求是固定精度.这意味着必须对具有固定指定精度的值执行所有数学运算,并且结果必须具有相同的精度.固定精度表示小数点后的设定位数.之后的任何数字都将被丢弃.
因此,如果我们假设5位数的精度:
42/139
Run Code Online (Sandbox Code Playgroud)
变为:
42.00000/139.00000 = 0.30215
Run Code Online (Sandbox Code Playgroud)
我在为此编写单元测试时遇到问题.到目前为止,我已经为大小数字写了这两个测试.
public void TestPrecisionBig()
{
PRECISION = 5;
decimal d = Precision(1987.7845263487169386183643876m);
Assert.That(d == 1987.78452m);
}
public void TestPrecisionSmall()
{
PRECISION = 5;
decimal d = Precision(42);
Assert.That(d == 42.00000m);
}
Run Code Online (Sandbox Code Playgroud)
但它评估为42 == 42.00000m不是我想要的.
我该如何测试?我想我可以做一个d.ToString,但这是一个很好的"正确"测试吗?
编辑:我被要求显示我的Precision方法的实现.它不是很优雅,但它有效.
public static decimal Precision(decimal d)
{
if (d == 0) return 0.00000m;
decimal output = Math.Round(d, 6);
string s = output.ToString(CurrentCulture);
char c = char.Parse(CurrentCulture.NumberFormat.NumberDecimalSeparator);
if (s.Contains(c))
{
output = decimal.Parse(s.Substring(0, s.Length - 1));
return output;
} …Run Code Online (Sandbox Code Playgroud)