为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C#中将float转换为int,使其输出与float.ToString()相同的值?

如何在C#中将float转换为int,使其输出与float.ToString()相同的值?

C#
吃鸡游戏 2021-05-14 18:19:57
调用ToString()不精确的浮点数会产生人们期望的数字(例如4.999999 ...被打印为5)。但是,当强制转换为int时,小数部分会丢失,结果是一个整数减1。float num = 5f;num *= 0.01f;num *= 100f;num.ToString().Dump(); // produces "5", as expected((int)num).ToString().Dump(); // produces "4"如何将浮点数转换为int,以便获得对人类有益的价值,从而float.ToString()产生这种价值?我正在使用这个肮脏的技巧:int ToInt(float value) {    return (int)(value + Math.Sign(value) * 0.00001);}..但肯定必须有一个更优雅的解决方案。
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

也许您正在寻找:

Convert.ToInt32(float)

来源


查看完整回答
反对 回复 2021-05-23
?
慕少森

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());


查看完整回答
反对 回复 2021-05-23
?
慕沐林林

TA贡献2016条经验 获得超9个赞

到目前为止,最好的解决方案似乎就是问题所在。


int ToInt(float value) {

    return (int)(value + Math.Sign(value) * 0.000001f);

}

如果差异足够小(小于0.000001),则可以有效地将值捕捉到最接近的int 。但是,此函数与ToString的行为不同,并且对不精确性的容忍度更高。


建议的另一种解决方案是使用ToString并将字符串解析回去。当数字具有小数点(或逗号)时,使用Int32.Parse会引发异常,因此您仅需保留字符串的整数部分,这可能会导致其他麻烦,具体取决于您的default CultureInfo。


查看完整回答
反对 回复 2021-05-23
  • 3 回答
  • 0 关注
  • 271 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信