在Java中使用double值舍入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中使用double值舍入相关的知识,希望对你有一定的参考价值。

在我的Java编程教科书中,一节描述:“注意任何双值x都可以使用(int)(x + 0.5)向上舍入为整数。”

这是真的?

如果为x插入3.4,则该值将返回3并且不会向上舍入,因为整数数据类型向下舍入。也许我只是没有正确理解它。

提前致谢。

答案

注意任何双值x都可以使用(int)(x + 0.5)向上舍入为整数

这在理论上是正确的,并且如果浮点数具有无限精度,则在实践中也是如此。

理论上:

 value    value+0.5    (int)(value+0.5)
  3.1       3.6              3
  3.499     3.999            3
  3.5       4.0              4
  3.501     4.001            4

事实上,事情并不是那么整洁,因为浮动点的精度有限,你可以进入这样的情况:

actual value     stored as    value+0.5    (int)(value+0.5)
123123.49999      12123.5       12124.0        12124
123123.50000      12123.5       12124.0        12124
123123.50001      12123.5       12124.0        12124

其中第一个值不能表示为float,最近的浮点数是12123.5,导致意外结果。

进一步阅读:

以上是关于在Java中使用double值舍入的主要内容,如果未能解决你的问题,请参考以下文章

在java中将双精度值舍入为两位有效数字[重复]

即使在 C 中使用“\n%.2f”后,也无法将浮点值舍入到最接近的第二个小数 [关闭]

使用 SQLAlchemy 和 MySQL 进行浮点值舍入

R:将 p 值舍入到 xtable 中的两位有效数字,并将 ReporteRs 导出到 Latex/Office/LibreOffice

如何优化 spark 函数以将双精度值舍入到小数点后 2 位?

在 Objective-C 中舍入双数