gpt4 book ai didi

Java 度量单位库加法和减法返回不正确的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:55 24 4
gpt4 key购买 nike

我正在使用 JSR363 的引用实现。我已经尝试了很多变体,但我将以这段代码为例。

ServiceProvider provider = ServiceProvider.current();
QuantityFactory<Length> lengthFactory = provider.getQuantityFactory(Length.class);
Quantity<Length> first = lengthFactory.create(5, Units.METRE.divide(100.0));
Quantity<Length> second = lengthFactory.create(3, Units.METRE);
System.out.println(second.add(first));

这将打印 503.0 米。显然有些地方出了问题,这应该是 3.05 m。我发现很难相信这实际上是图书馆的一个错误,我希望有人能告诉我我遗漏了什么。

最佳答案

在仔细研究之后,我已经能够重现所讨论的奇怪之处。似乎在将 Unit 传递到 QuantityFactory 时使用 multiply()divide() 方法会产生奇怪的效果。例如:

Quantity firstQuant = quantFactory.create(10.0,Units.METRE)
Quantity secondQuant = quantFactory.create(20.0,Units.METRE.divide(10.0))
System.out.println(secondQuant.add(firstQuant))

输出以下内容:20.5 dm。即使使用 MetricPrefix(这似乎是设置非基本 SI 单位的默认方法),它似乎也会生成极其不准确的 Units。使用以下内容:

Quantity secondQuant = quantFactory.create(20.0,MetricPrefix.KILO(Units.METRE))

输出 10020.0 km 远不准确。但是,以下内容:

Quantity firstQuant = quantFactory.create(10.0,Units.METRE)
Quantity secondQuant = quantFactory.create(20.0,Units.METRE)
System.out.println(secondQuant.divide(10.0).add(firstQuant))

输出12.0 m,显然是正确答案。

老实说,最好的解决方案是在创建 Quantity 时简单地不使用这些操作,并使用内置的 getConverter() 转换为其他测量单位MetricPrefix 枚举。

创建 Quantities 的更好方法是使用 Quantities.getQuantities()

关于Java 度量单位库加法和减法返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39717722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com