输出结果如何为“ 1”?
long number = 499_999_999_000_000_001L;
double converted = (double) number;
System.out.println(number - (long) converted);
TLDR:是因为溢出位
如果您查看Java文档Double.MAX_VALUE。您将观察到java支持的最大双精度整数值为2 ^ 53≅10 ^ 16,但在类型转换后您的值变为(4.99999999 * 10 ^ 17),该值超出double的范围,因此由于溢出而被四舍五入。为了更好地理解,请运行此代码。
public class Main
{
public static void main(String[] args) {
long longNumber = 499_999_999_000_000_001L;
double doubleNumber = (double) longNumber;
long longConverted = (long)doubleNumber;
System.out.println(longNumber+" "+doubleNumber+" "+longConverted);
}
}
其输出将是:
499999999000000001 4.99999999E17 499999999000000000
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句