损失精度
回答
4.35不能准确地表示为浮动因为0.35不是2的(负)幂。因此,这种或那种方式有一点舍入。当你乘以100时,可能还会有四舍五入的结果。如果结果数字少于435,则投射到int将占据它的底部,即434.
如果您想轮到NEAREST integer,你可以在结果中加0.5,然后转换为int。这是对数字进行舍入的最普通的方式,尽管Java内置了四舍五入的实现。
double f = 4.35;
int n = (int) (100 * f + 0.5);
您需要观看此视频。我做了第一年的单身学生看作业。 http://vimeo.com/7403673 - Jon Skeet和托尼小马。
乔恩斯基特的介绍在伦敦堆栈溢出DevDays事件:stackoverflow.carsonified.com
在6点50分左右,他谈到了在Java中数学和所面临的一些开发人员关于数学的共同问题。
没有某种总结就没有答案。 –
如果我没有找到视频如此有趣,我会低估你的答案:) – devsnd
试试这个:
double f = 4.35;
int n = (int) Math.round(100 * f);
现在n
将具有价值435
,符合市场预期。处理基数2中表示的十进制值时出现这种问题是因为舍入误差,请查看此参考以了解更多信息:What Every Computer Scientist Should Know About Floating-Point Arithmetic。
这是因为浮点数内部基2中表示,以免基部10
这这里将帮助(必须导入Math
):
double f = 4.35;
long n = Math.round(100 * f);
- 1. 损失精度
- 2. 精度损失?
- 3. 精确度损失
- 4. 损失的精度熊猫
- 5. 浮标精度损失
- 6. 铸造损失精度[-fpermissive]
- 7. 春季queryForLong - 精度损失
- 8. 可能会损失精度?
- 9. 损失的精度:+与+ =
- 10. 损失的精度 - Java的
- 11. 损失的精度从双
- 12. 损失精度计算度两点
- 13. 从C#到SQL Server的精度损失
- 14. Django十进制精度损失
- 15. XYSeries自动调整精度损失?
- 16. Python Cassandra浮动精度损失
- 17. 的Math.random()与精度损失好奇心
- 18. C#精度损失除以双
- 19. 其中BC损失精度shell脚本
- 20. Lua的小数精度损失
- 21. C#double至十进制精度损失
- 22. Xcode 5.1 NSInteger int,精度损失
- 23. C++浮点精度损失:3015/0.00025298219406977296
- 24. Seven_segment可能的损失精度
- 25. 要显示而不损失精度圆
- 26. 当从双精度转换为浮点时检测精度损失
- 27. 警告:隐式转换损失整数精度在Xcode 6
- 28. 控制精度溢出和损失,同时乘以双打
- 29. openpyxl:从Excel中读取浮点精度的损失?
- 30. 诠释到浮点数转换精度损失
[每个计算机科学家都应该知道的浮点算术](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 – Oded