正在尝试在这里找到的代码
the Java specialists’newsletter。
公共类管理办公文件{
publicstaticstringfindoutwhatlifeisallabout (
int meaning=0;
for(intI=0; i 10; I ) {
for(intj=0; j 20; j ) {
for(intk=0; k 300; k ) {
for(intm=0; m 7000; m ) {
meaning =Math.random () 1;
}
}
}
}
returnstring.valueof(meaning ).replaceall('0*$ ','');
}
publicstaticvoidmain (字符串[ ] args ) {
system.out.println (findoutwhatlifeisallabout ();
}
}
“打印什么”这个问题的答案似乎很明显,但如果你发现有一个隐式演员和compound assignment operator=。
但是印得像420000006或420000007。
420000000 (或删除尾随零而不是“42”)。
因此,double到int的转换表明不一定要放弃两倍的小数部分。 正如这里所说明的,How to cast a double to an int in Java?
所以我做了一些实验。 这里是我发现的一个例子:
system.out.println((int ) ) 131070.99999999999 ); //- 131070
system.out.println((int ) ) 131071.99999999999 ); //- 131071
system.out.println((int ) ) 131072.99999999999 ); //- 131073!
system.out.println((int ) ) 131073.99999999999 ); //- 131074!
system.out.println((int ) ) 16382.999999999999 ); //- 16382
system.out.println((int ) ) 16383.999999999999 ); //- 16383
system.out.println((int ) ) 16384.999999999999 ); //- 16385!
system.out.println((int ) ) 16385.999999999999 ); //- 16386!
那么现在我在找解释这个行为吗?