好奇怪啊,用for循环写的这样的等式一直计算出50个,其实实际计算是51,我打印出来,有好多数都有很长的小数点,想请教一下,该如何将那些很长的小数点去除?
关于相加出现多余小数你可以参考这篇问答: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();
该回答通过自己思路及引用到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 类型,它提供了更高的精度,但是也会带来一些性能上的损失。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢