首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Math.round(0.49999999999999994)返回1?

为什么Math.round(0.49999999999999994)返回1?

提问于 2017-12-18 12:58:01
回答 2关注 0查看 548

在下面的程序中,你可以看到每个值略小于.5被舍去,除了0.5。

代码语言:txt
复制
for (int i = 10; i >= 0; i--) {
代码语言:txt
复制
    long l = Double.doubleToLongBits(i + 0.5);
代码语言:txt
复制
    double x;
代码语言:txt
复制
    do {
代码语言:txt
复制
        x = Double.longBitsToDouble(l);
代码语言:txt
复制
        System.out.println(x + " rounded is " + Math.round(x));
代码语言:txt
复制
        l--;
代码语言:txt
复制
    } while (Math.round(x) > i);
代码语言:txt
复制
}

输出

代码语言:txt
复制
10.5 rounded is 11
代码语言:txt
复制
10.499999999999998 rounded is 10
代码语言:txt
复制
9.5 rounded is 10
代码语言:txt
复制
9.499999999999998 rounded is 9
代码语言:txt
复制
8.5 rounded is 9
代码语言:txt
复制
8.499999999999998 rounded is 8
代码语言:txt
复制
7.5 rounded is 8
代码语言:txt
复制
7.499999999999999 rounded is 7
代码语言:txt
复制
6.5 rounded is 7
代码语言:txt
复制
6.499999999999999 rounded is 6
代码语言:txt
复制
5.5 rounded is 6
代码语言:txt
复制
5.499999999999999 rounded is 5
代码语言:txt
复制
4.5 rounded is 5
代码语言:txt
复制
4.499999999999999 rounded is 4
代码语言:txt
复制
3.5 rounded is 4
代码语言:txt
复制
3.4999999999999996 rounded is 3
代码语言:txt
复制
2.5 rounded is 3
代码语言:txt
复制
2.4999999999999996 rounded is 2
代码语言:txt
复制
1.5 rounded is 2
代码语言:txt
复制
1.4999999999999998 rounded is 1
代码语言:txt
复制
0.5 rounded is 1
代码语言:txt
复制
0.49999999999999994 rounded is 1
代码语言:txt
复制
0.4999999999999999 rounded is 0

我正在使用Java 6。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档