首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >整除:为什么1/3 ==的结果是0?

整除:为什么1/3 ==的结果是0?
EN

Stack Overflow用户
提问于 2011-01-14 05:25:37
回答 17查看 167.6K关注 0票数 127

我写了这段代码:

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
    double g = 1 / 3;
    System.out.printf("%.2f", g);
}

结果是0。为什么会这样,我该如何解决这个问题?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-01-14 05:27:07

两个操作数(1和3)是整数,因此使用整数运算(这里是除法)。将结果变量声明为double只会导致除法后发生隐式转换。

当然,整数除法返回四舍五入为零的除法的真实结果。因此,0.333...的结果在这里四舍五入为0。(请注意,处理器实际上并不进行任何舍入,但您仍然可以这样认为。)

另外,请注意,如果两个操作数(数字)都是以浮点数形式给出的: 3.0和1.0,甚至是第一个,则使用浮点算术,从而得到0.333...

票数 163
EN

Stack Overflow用户

发布于 2011-01-14 05:31:09

1/3使用整数除法,因为两边都是整数。

您至少需要其中一个是floatdouble

如果像您的问题一样在源代码中输入值,则可以执行1.0/31.0是一个双精度型。

如果您从其他地方获得值,则可以使用(double)int转换为double

代码语言:javascript
代码运行次数:0
运行
复制
int x = ...;
int y = ...;
double value = ((double) x) / y;
票数 27
EN

Stack Overflow用户

发布于 2011-01-14 05:26:28

将其显式转换为double

代码语言:javascript
代码运行次数:0
运行
复制
double g = 1.0/3.0

这是因为Java对13使用了整数除法运算,因为它们是作为整数常量输入的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4685450

复制
相关文章

相似问题

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