使用Java中的double值舍入

时间:2017-12-18 02:36:54

标签: java casting integer double rounding

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

这是真的吗?

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

I've pasted an image of the section to provide more context.

提前致谢。

1 个答案:

答案 0 :(得分: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,导致意外结果。

进一步阅读: