舍入c#提供错误的答案

舍入c#提供错误的答案,第1张

概述我正在为一个学校项目(自行车厂)编制一个库存/生产计划,而且我必须填写一些数字,例如必须生产的自行车(由于后果是双打). 如果我使用以下代码: double test = Math.Ceiling(100 * 1.09);label75.Text = Convert.ToString(test); 我得到答案110,但这是不对的,应该是109(100%的9%).虽然它的价值低于9%. 我究竟做 我正在为一个学校项目(自行车厂)编制一个库存/生产计划,而且我必须填写一些数字,例如必须生产的自行车(由于后果是双打).

如果我使用以下代码:

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标识为十进制文字.这是因为十进制类型专门用于表示十进制数(而不仅仅是它们的二进制近似,双倍和浮点数).

总结

以上是内存溢出为你收集整理的舍入c#提供错误的答案全部内容,希望文章能够帮你解决舍入c#提供错误的答案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1259586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存