在Java中使用double值舍入

问题描述 投票:0回答:1

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

这是真的?

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

提前致谢。

java casting integer double rounding
1个回答
0
投票

注意任何双值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,导致意外结果。

进一步阅读:

© www.soinside.com 2019 - 2024. All rights reserved.