理解 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);
您超出了 double
的 precision(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
我正在尝试获取当前系统时间,
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);
您超出了 double
的 precision(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