C# for循环,头一次遇到,真奇怪

好奇怪啊,用for循环写的这样的等式一直计算出50个,其实实际计算是51,我打印出来,有好多数都有很长的小数点,想请教一下,该如何将那些很长的小数点去除?

img

关于相加出现多余小数你可以参考这篇问答:https://bbs.csdn.net/topics/300023952
里面有许多人曾经讨论过这个问题可供参考

当然 你也可以把double改为decimal
所有有小数点计算时,尽可能用更高精度的 decimal 型,初始化decimal类型时需要使用m/M后缀,不用的话会被被认为隐式的将double类型转换为decimal类型而报错。(float也是,加f/F后缀)
下面是改变之后的正确代码:

 decimal a = -110;
            decimal b = 110;
            decimal c = 4.4m;
            int n = 0;
            List<decimal> list = new List<decimal>();
            for (decimal i = a; i <= b; i+=c)
            {
                
                Convert.ToDouble(i).ToString("0.00");
                list.Add(i);
                n++;
            }
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.WriteLine("我是N"+n);
            Console.ReadLine();

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你提供的截图,问题可能出在 double 类型的精度上。double 类型的精度有限,当计算结果超出其精度范围时,可能会出现舍入误差,导致小数点后出现很长的数字。

如果想要去除这些长小数点,可以使用格式化字符串的方式来限制小数点后的位数。例如,可以使用 String.Format 方法将 double 类型的计算结果转换为字符串,并指定小数点后的位数,示例代码如下:

for (int i = 1; i <= 50; i++)
{
    double result = 1.0 / i;
    Console.WriteLine("1/{0} = {1:F3}", i, result); // 将 result 转换成字符串,并保留三位小数
}

在上述示例代码中,我们使用了格式字符串 "{1:F3}",其中 F3 表示保留三位小数。可以根据实际需求修改小数点后的位数。

另外,如果需要进行更高精度的计算,可以考虑使用 decimal 类型,它提供了更高的精度,但是也会带来一些性能上的损失。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢