我不应该得到负数,请参见下面的屏幕截图:
见下图:
这是代码:
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 位有符号整数。如果 value 在两个整数的中间,则返回偶数;即4.5转换为4,5.5转换为6。
这意味着每隔一个数字将向上取整,然后向下取整,然后向上取整,然后向下取整,这意味着您将有一半的时间得到负数。
此方法的目的是消除由于始终沿特定方向舍入而引入的偏差。考虑总结大量的值,首先将它们四舍五入。如果你总是四舍五入,最终的总和总是大于对未四舍五入的值求和然后四舍五入的总和。但是,如果根据上面列出的规则,四舍五入,四舍五入的最终总和更有可能更接近四舍五入的总和。
您还可以在维基百科上阅读更多相关信息:Round。它有时被称为银行家四舍五入,尽管据我所知银行不使用这种方法。
为确保您根据需要四舍五入:
我不知道你会期待什么,但在这种情况下 double 是四舍五入的,而不是截断的
value:四舍五入到最接近的 32 位有符号整数。如果 value 在两个整数的中间,则返回偶数;即4.5转换为4,5.5转换为6。
试试这个解决你的问题
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)) ;
看起来它是交替上下四舍五入。
并不特别令人惊讶