理解Java变量/小数

时间:2016-01-31 05:17:00

标签: java variables decimal

我正在尝试占用当前的系统时间,

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

2 个答案:

答案 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);