这是一个bug?浮动操作被视为整数
发布时间:2020-12-15 20:00:44 所属栏目:asp.Net 来源:网络整理
导读:此操作返回0: string value = “0.01”;float convertedValue = float.Parse(value);return (int)(convertedValue * 100.0f); 但是这个操作返回1: string value = “0.01”;float convertedValue = float.Parse(value) * 100.0f;return (int)(convertedVal
此操作返回0:
string value = “0.01”; float convertedValue = float.Parse(value); return (int)(convertedValue * 100.0f); 但是这个操作返回1: string value = “0.01”; float convertedValue = float.Parse(value) * 100.0f; return (int)(convertedValue); 因为convertedValue是一个浮点数,而是在括号中* 100f不应该被视为浮动操作? 解决方法
两者之间的区别在于编译器优化浮点运算的方式.让我解释.
string value = "0.01"; float convertedValue = float.Parse(value); return (int)(convertedValue * 100.0f); 在此示例中,该值被解析为80位浮点数,用于计算机的内部浮点地牢.然后将其转换为32位浮点数以存储在convertedValue变量中.这使得值被四舍五入,似乎是略小于0.01的数字.然后将其转换回80位浮点数乘以100,将舍入误差增加100倍.然后将其转换为32位int.这导致float被截断,并且由于它实际上略小于1,所以int转换返回0. string value = "0.01"; float convertedValue = float.Parse(value) * 100.0f; return (int)(convertedValue); 在此示例中,该值再次解析为80位浮点数.然后将其乘以100,然后将其转换为32位浮点数.这意味着舍入误差是如此之小,当转换为32位浮点型存储在convertedValue中时,它将舍入到正好为1.然后当转换为int时,您将获得1. 主要思想是计算机使用高精度浮点进行计算,然后在值存储在变量中时对其进行舍入.您使用浮动物体的分配越多,舍入误差越多. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 将MVC 2项目升级到MVC 5
- asp.net access web.config denied
- asp.net-mvc – ASP.NET MVC Json DateTime序列化转换为UTC
- asp.net – 代码隐藏方法与Jquery AJAX调用
- asp.net-mvc – 如何在视图模型中更改隐式必需属性的错误消
- ASP.NET Web应用程序(MVC)部署自动化和Subversion
- asp.net – 当主机名中有下划线时,表单身份验证无法识别为在
- ASP.NET,C#后台调用前台javascript的五种方法
- ASP.NET Core 3.0 gRPC 双向流
- asp.net – 如何使用iTextSharp打印网格视图
推荐文章
站长推荐
- asp.net-mvc – 如何在html.LabelFor中显示一些文
- asp.net-mvc-2 – ASP.NET:ActionLink返回相对u
- asp.net-mvc – 使用Web Deploy发布ASP.NET MVC2
- asp.net – SignalR中的最大消息限制
- asp.net – 在SessionPageStatePersister中保持V
- 难道调用ThreadPool.QueueUserWorkItem()的时候
- asp.net – IIS 7似乎正在删除显式设置的内容类型
- 基于B/S模式的asp课程重难点掌握情况分析系统
- ASP.NET AJAX被禁用的原因
- asp.net-mvc – 获取文件夹中的文件
热点阅读