首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将int除以int并将结果存储为双精度时出现意外结果

问将int除以int并将结果存储为双精度时出现意外结果
EN

Stack Overflow用户
提问于 2013-05-02 19:55:28
回答 4查看 12.7K关注 0票数 6

我有个奇怪的问题。

这段代码简单地将一个int除以另一个int,将结果存储在一个双精度变量中并打印出来:

代码语言:javascript
复制
int a = 200;
int b = 557;

double divisionResult = a / b;

System.out.println("Result: " + divisionResult);

执行此代码后,输出为:

代码语言:javascript
复制
Result: 0

这很奇怪,因为200/557是0.3590664272890485

我注意到,如果将a和b转换为除法行中的double

代码语言:javascript
复制
double divisionResult = (double) a / (double) b;

它工作得很完美。

为什么我必须将我的变量转换为双精度才能得到真正的除法结果?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-02 19:57:21

因为在整数除法中,如果答案不是完全整数,小数点后的数字将被删除(整数除法产生整数值)。

请注意,您不必强制转换这两个整数,您可以仅强制转换一个,第二个将被隐式转换。

为什么在造型后它会起作用呢?

因为cast比/具有更高的优先级。所以它首先进行转换,然后再进行除法运算。如果不是这样的话,你会得到0.0。

票数 9
EN

Stack Overflow用户

发布于 2013-05-02 19:57:29

与往常一样,赋值运算符右侧的任何计算都是在将其结果赋给左侧指定的变量之前执行的。当执行计算时,它是两个int之间的除法,这是一个整数除法(我相信您知道),它产生一个整数结果(即没有任何余数的商)。只有在执行此计算之后,才会将整数除法的结果-0-转换为双精度。

正如您所观察到的,将一个或两个int更改为double将使计算成为双除法,而不是整数除法。

票数 1
EN

Stack Overflow用户

发布于 2013-05-02 20:00:03

A是int,b是int,除以a/b会得到一个int值,因此0.35转换为int就变成了0。

代码语言:javascript
复制
double d = (double)a/b;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16337456

复制
相关文章

相似问题

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