You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#中如何将float转换为int以匹配float.ToString()的输出结果?

这个问题我之前也踩过坑,本质就是float的精度误差在搞鬼——你示例里的num看起来逻辑上是5,但实际存储的是一个略小于5的浮点数(比如4.99999976158142)。ToString()会自动做近似处理,输出人类友好的"5";但直接强制转int是粗暴截断小数部分,自然就得到4了。

下面给你几个优雅且靠谱的解决方案:

可行的转换方法

1. 用Math.Round()做四舍五入转换

这是最直观的思路:先把浮点数四舍五入到最近的整数,再转成int类型:

float num = 5f;
num *= 0.01f;
num *= 100f;
int result = (int)Math.Round(num);
result.ToString().Dump(); // 输出"5"

Math.Round()默认采用「四舍六入五成双」的规则,但对于你这种因精度误差导致的“接近整数”场景,完全能得到符合预期的结果。

2. 用Convert.ToInt32()直接转换

这个方法内部已经封装了浮点数转整数的逻辑,会自动做四舍五入处理,写法更简洁:

int result = Convert.ToInt32(num);
result.ToString().Dump(); // 输出"5"

它的规则是向最近的整数转换,如果数值正好在两个整数中间(比如2.5),会取偶数结果,但同样完美适配你的场景。

不推荐的临时方案(你的原思路)

如果之前你是用「转字符串再转int」的方式:

int result = int.Parse(num.ToString());

虽然能得到正确结果,但这种方式效率很低——毕竟绕了字符串序列化的弯路,而且如果浮点数带非整数的小数位,还可能抛出转换异常,所以不建议长期使用。

内容的提问来源于stack exchange,提问作者blade

火山引擎 最新活动