C# 使用十进制类型处理比率的算法

C# 使用十进制类型处理比率的算法,c#,algorithm,decimal,rounding,C#,Algorithm,Decimal,Rounding,你会用什么技巧让下面的测试通过 干杯, 贝里尔 [测试] 公共无效百分比到碎片(){ 对于(int i=1;i

你会用什么技巧让下面的测试通过

干杯,
贝里尔

[测试]
公共无效百分比到碎片(){
对于(int i=1;i<20;i++){
十进制比率=1m/i;
控制台写入线(比率);
var splitCount=(int)Math.Floor(1/比率);//***这不行
控制台写入线(拆分计数);
Assert.That(splitCount,Is.EqualTo(i));
}
1变为1
0.5变为2
0.3333333变为3
0.25变为4
0.2变为5
0.16666666666667变为5
测试“PercentageToSplit”失败:
预期:6
但结果是:5

如果您将
Math.Floor
更改为
Math.Round
,您的测试将通过

    [Test]
    public void PercentageToSplit() {
        for (int i = 1; i < 20; i++) {
            decimal ratio = 1m / i;
            Console.WriteLine(ratio);

            var splitCount = (int)Math.Floor(1 / ratio); // *** this won't do
            Console.WriteLine(splitCount );

            Assert.That(splitCount, Is.EqualTo(i));
        }

1 becomes 1
0.5 becomes 2
0.3333333333333333333333333333 becomes 3
0.25 becomes 4
0.2 becomes 5
0.1666666666666666666666666667 becomes 5
Test 'PercentageToSplit' failed: 
  Expected: 6
  But was:  5