3 回答

TA贡献2019条经验 获得超9个赞
0.05f * 100 由于浮点舍入而不是正好为5(实际上是值4.999998 ....以浮点数表示时
答案是,在的情况下(int)(.05f * 100),您将浮点值4.999998截断为一个整数,从而得出4。
所以用Math.Round。Math.Round函数将浮点值四舍五入到最接近的整数,并将中点值四舍五入到最接近的偶数。
float num = 5f;
num *= 0.01f;
num *= 100f;
Console.WriteLine(num.ToString());
Console.WriteLine(((int)Math.Round(num)).ToString());

TA贡献2016条经验 获得超9个赞
到目前为止,最好的解决方案似乎就是问题所在。
int ToInt(float value) {
return (int)(value + Math.Sign(value) * 0.000001f);
}
如果差异足够小(小于0.000001),则可以有效地将值捕捉到最接近的int 。但是,此函数与ToString的行为不同,并且对不精确性的容忍度更高。
建议的另一种解决方案是使用ToString并将字符串解析回去。当数字具有小数点(或逗号)时,使用Int32.Parse会引发异常,因此您仅需保留字符串的整数部分,这可能会导致其他麻烦,具体取决于您的default CultureInfo。
- 3 回答
- 0 关注
- 284 浏览
添加回答
举报