我不应该得到负数,如下面的截图所示:
请看下面的图片:
这是代码:
for (double i=8.0; i<=12;i=i+0.5)
{
double aa= (i - Convert.ToInt32(i)) ;
Console.WriteLine(" "+i+" "+aa);
}
我不应该得到负数,如下面的截图所示:
请看下面的图片:
这是代码:
for (double i=8.0; i<=12;i=i+0.5)
{
double aa= (i - Convert.ToInt32(i)) ;
Console.WriteLine(" "+i+" "+aa);
}
如果您查看文档:
返回值
类型:System.Int32
值将四舍五入为最接近的32位有符号整数。如果值恰好处于两个整数之间,则返回偶数;即4.5转换为4,5.5转换为6。
这意味着每隔一个数会向上取整,然后向下取整,再向上取整,最后向下取整,这意味着一半的时间会得到负数。
此方法的目的是平衡始终向特定方向舍入所引入的偏差。考虑将大量值相加并先对它们进行舍入。如果总是向上舍入,则最终和总是大于将未舍入值相加然后对和进行舍入的总和。但是,如果根据上述规则一半向上舍入,一半向下舍入,则舍入数字的最终总和更可能接近舍入总和。
您还可以在维基百科上阅读更多信息。它有时被称为银行家舍入,尽管据我所知银行并不使用此方法。
为确保按您想要的方式进行舍入:
值:四舍五入到最接近的32位有符号整数。如果该值正好处于两个整数之间,则返回偶数;也就是说,4.5 转换成 4,5.5 转换成 6。
请查阅 Convert.ToInt32(double) 文档
尝试这个解决你的问题负分
for (double i = 8.0; i <= 12; i = i + 0.5)
{
double aa = Convert.ToInt32(i);
Console.WriteLine(aa+" " +i );
}
double aa= (i - Convert.ToInt32(i)) ;
看起来它在交替地四舍五入。
并不特别令人惊讶。