为什么1/2使用双倍== 0?

时间:2016-04-27 23:41:59

标签: java double

我是一名正在准备参加州学术会议(UIL)的高中生。我有一个问题,我到处寻找,似乎无法找到答案!为什么打印出0.0?

double d = 1/2;
System.out.println(d);

4 个答案:

答案 0 :(得分:10)

这是因为数据类型。

当你执行整数除法1/2因为两个操作数是整数时,它会解析为零(0.5向下舍入为零)。

如果将其中任何一个转换为double,您将获得双倍结果。

double d = 1d/2;

double d = 1/2.0;

答案 1 :(得分:1)

1和2都是整数,所以/home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp: In member function ‘std::vector<T> ListLib<T>::convertToVector()’: /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:15:3: error: need ‘typename’ before ‘std::list<T>::iterator’ because ‘std::list<T>’ is a dependent scope std::list<T>::iterator itList; ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:15:26: error: expected ‘;’ before ‘itList’ std::list<T>::iterator itList; ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:17:8: error: ‘itList’ was not declared in this scope for (itList = *listT->begin(); itList != *listT->end(); itList++) ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:18:12: error: expected unqualified-id before ‘(’ token result->(*itList); ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:20:3: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope std::vector<T>::iterator itVec; ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:20:28: error: expected ‘;’ before ‘itVec’ std::vector<T>::iterator itVec; ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:21:8: error: ‘itVec’ was not declared in this scope for (itVec = result.begin(); itVec != result.end()) ^ /home/ubuntu/workspace/c++/CustomLibaries/listLib.cpp:21:53: error: expected ‘;’ before ‘)’ token for (itVec = result.begin(); itVec != result.end()) ^ 。在将结果分配给变量之前,结果不会转换为1 / 2 == 0,但到那时为时已晚。如果您想进行浮动除法,请执行double

答案 2 :(得分:1)

因为12int值,所以根据java语言规范,对int个操作数的算术运算结果是还int。结果的任何非整数部分都被丢弃 - 即小数部分被截断,0.5 - &gt; 0

int分配给double时,会自动从d扩展到int,但是对0结果执行强制转换,这是一个整体号码double

如果&#34;修复&#34;问题是,通过添加&#34; d&#34;来设置其中一个操作数double d = 1d/2; System.out.println(d); // "0.5" 。到数字文字:

double

根据语言规范,当算术运算的一个操作数为double时,结果也为double d = 1/2.0; System.out.println(d);

答案 3 :(得分:1)

导致1/2 = 0的结果,然后结果解析为double。你正在使用int而不是double。 我认为应该没问题:

public struct Array<Element> : CollectionType, MutableCollectionType, _DestructorSafeContainer {}

抱歉弱英语