使用C# 中的 float.Parse 方法 将string 转 float 时,由于 float 精度问题,碰到一个奇怪的BUG,找了半天才解决,故此记录。
发现问题:在我的 Unity 项目中有一个输入框,输入2.8,保存之后,下次加载出来竟然变成了2.79,再下次变成2.78,然后2.77,2.76,2.75(内心OS:WTF???这是什么鬼才BUG?逗我呢吧!)
问题解决:找了半天,终于发现是把 string 转 float 的时候出了问题。float.Parse(text),"2.8" 转成 float 之后变成了2.79999999046326,然后因为输入框做了长度限制,Character Limit (使用的是Unity的Input Field 组件)为4,所以显示出来就是2.79了,"2.79"转成 float 又变成了 2.78999999046326,直到 2.75 (至于为什么到 2.75 就不再变小了,这个跟 float 在计算机中的数值表示方法有关)。
emmmmm...网上找了一下解决办法,说是用 decimal 就不会丢失精度了,不过对我这个项目来说,转成 float 之后四舍五入一下就可以了,保留两位小数,完美。