理解 Java Variable/Decimals

Understanding Java Variable/Decimals

我正在尝试获取当前系统时间,

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 位或更多位?

把它格式化成三个地方,试试这个。

System.out.printf("Since the unix Epoch, light has traveled...\n%.3f km", km);

您超出了 doubleprecision(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