我不应该得到负数,请参见下面的截图:
见下图:
以下是代码:
for (double i=8.0; i<=12;i=i+0.5)
{
double aa= (i - Convert.ToInt32(i)) ;
Console.WriteLine(" "+i+" "+aa);
}
答案 0 :(得分:14)
如果您查看documentation:
返回值
类型:System.Int32
值,舍入为最接近的32位有符号整数。如果值在两个整数之间,则返回偶数;也就是说,4.5转换为4,5.5转换为6.
这意味着每隔一个数字会向上舍入,然后向下,然后向上,然后向下,这意味着你将在一半的时间内获得负数。
这种方法的目的是通过始终在特定方向上舍入来平衡偏差。考虑总结大量的值,先将它们四舍五入。如果您总是向上舍入,则最终总和将始终大于对未舍入值求和然后舍入总和。但是,如果你根据上面列出的规则将上半部分和下半部分舍入,则舍入数字的最终总和更可能接近舍入的总和。
您还可以在wikipedia: Round上阅读有关此内容的更多信息。它有时被称为银行家四舍五入虽然据我所知银行不使用这种方法。
确保您按照自己的要求进行四舍五入:
答案 1 :(得分:1)
我不知道你会期望什么,但在这种情况下,double是四舍五入的,不是截断的
value:四舍五入到最接近的32位有符号整数。如果值在两个整数之间,则返回偶数;也就是说,4.5转换为4,5.5转换为6.
答案 2 :(得分:1)
试试这个解决你的问题的负面痕迹
for (double i = 8.0; i <= 12; i = i + 0.5)
{
double aa = Convert.ToInt32(i);
Console.WriteLine(aa+" " +i );
}
答案 3 :(得分:0)
double aa= (i - Convert.ToInt32(i)) ;
看起来像是上下四舍五入。
并不特别令人惊讶