我正在尝试占用当前的系统时间,
long now = System.currentTimeMillis();
了解自1970年以来光线的行进距离(公里),
double km = (now / 1000.0) * 299792.458;
并打印该值。
System.out.printf("Since the unix Epoch, light has traveled...\n%f km", km);
但是当我运行代码时,我只能将答案缩小到两位小数。
435963358497001.750000 km
这有什么理由吗?使用
打印值System.out.println(km);
给了我
4.3596335849700175E14
看到E有意义,为什么它会中断。有没有办法让这个值达到3个或更多小数位?
答案 0 :(得分:4)
您超过了double
的{{3}}(15到17位小数),因此结果已四舍五入。
请尝试使用BigDecimal
:
long now = 1454217232166L; // Sun Jan 31 00:13:52 EST 2016
BigDecimal km = BigDecimal.valueOf(now).multiply(BigDecimal.valueOf(299.792458));
System.out.println(km); // prints: 435963358497001.804028
答案 1 :(得分:0)
只需将其格式化为三个位置,试试这个。
System.out.printf("Since the unix Epoch, light has traveled...\n%.3f km", km);