【发布时间】:2014-12-29 01:16:27
【问题描述】:
Duration.ofSeconds(-4, 333333333).multipliedBy(-2)
它返回PT7.333333334S,我预计结果是PT8.666666666S
这似乎是可取的,因为它有测试用例: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/test/java/time/tck/java/time/TCKDuration.java#l2151
我看不出这部分发生在代码的什么地方:
public Duration multipliedBy(long multiplicand) {
if (multiplicand == 0) {
return ZERO;
}
if (multiplicand == 1) {
return this;
}
return create(toSeconds().multiply(BigDecimal.valueOf(multiplicand)));
}
private static Duration create(BigDecimal seconds) {
BigInteger nanos = seconds.movePointRight(9).toBigIntegerExact();
BigInteger[] divRem = nanos.divideAndRemainder(BI_NANOS_PER_SECOND);
if (divRem[0].bitLength() > 63) {
throw new ArithmeticException("Exceeds capacity of Duration: " + nanos);
}
return ofSeconds(divRem[0].longValue(), divRem[1].intValue());
}
private BigDecimal toSeconds() {
return BigDecimal.valueOf(seconds).add(BigDecimal.valueOf(nanos, 9));
}
您能解释一下这是什么/为什么会发生吗?
【问题讨论】:
-
如果您不同意编辑,请随时重新编辑或回滚。我只是认为在正文中使用描述性标题和代码会比其他方式更具可读性。