舍入c#提供错误的答案
发布时间:2020-12-15 06:44:50 所属栏目:百科 来源:网络整理
导读:我正在为一个学校项目(自行车厂)编制一个库存/生产计划,而且我必须填写一些数字,例如必须生产的自行车(由于后果是双打). 如果我使用以下代码: double test = Math.Ceiling(100 * 1.09);label75.Text = Convert.ToString(test); 我得到答案110,但这是不对的,
我正在为一个学校项目(自行车厂)编制一个库存/生产计划,而且我必须填写一些数字,例如必须生产的自行车(由于后果是双打).
如果我使用以下代码: double test = Math.Ceiling(100 * 1.09); label75.Text = Convert.ToString(test); 我得到答案110,但这是不对的,应该是109(100%的9%).虽然它的价值低于9%. 我究竟做错了什么? 解决方法
双精度和浮点数是二进制浮点类型.这意味着它们不能精确地表示许多十进制数(如1.09).这导致一些微妙的回合错误.在你的情况下,100 * 1.09实际上导致一个数字比109稍微大一点,所以天花板功能正确地将其舍入到最接近的整数110.
将其更改为十进制,您将获得期望的结果: decimal test = Math.Ceiling(100 * 1.09m); // 109 注意1.09m中的m标识为十进制文字.这是因为十进制类型专门用于表示十进制数(而不仅仅是它们的二进制近似,双倍和浮点数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 使用Prawn和Prawnto生成PDF
- c# – NDesk.Options – 检测无效参数
- Cocos2d-x 3.0-新的Label-Cocos2d-x官方文档
- xml学习笔记1--XML语法
- oracle 触发器和存储过程简单例子
- 最全的常用正则表达式--包含校验数字、字符、一些特殊的需
- C语言正则表达式详解 regcomp() regexec() regfree()详解
- day17 ajax & 案例
- Dojo DataGrid 控件的 onCellDblClick 事件的工作流程
- react-native – 使用ListHeaderComponent在FlatList的屏幕