我想有一个数值变量,包含纳秒精度的整数。我试过这个:
Instant t = Instant.now();
a = BigDecimal.valueof(t.getEpochSecond() * 1e9 + t.getNano());
b = BigDecimal.valueof(t.getEpochSecond() * 1e9 + t.getNano() + 1);
两者 a
以及 b
如果包含相同的值(例如1.60681511777265408e+18),+1操作在此丢失。
你知道如何处理这种精确性吗?它的目标是保持XDB中时间列的纳秒精度时间戳。我知道这与双精度(javabigdecimal difference)有关,但我还没有找到任何有效的解决方案。
2条答案
按热度按时间7ajki6be1#
只需使用中的方法进行操作
BigDecimal
. 确保你不使用valueOf(double)
. 你可以用valueOf(long)
然而。印刷
a
以及b
给出如下信息:mbskvtky2#
如果存储的是整数值,为什么要使用
BigDecimal
而不是BigInteger
?需要切换到
BigInteger
但是2262年的数学方法,因为long
参数将开始溢出。