gpt4 book ai didi

java - 在 Java 中轻松交换 double/float

转载 作者:行者123 更新时间:2023-11-29 06:55:51 26 4
gpt4 key购买 nike

我有一个 Java 程序,它会抛出大量实数。

我有两种编译模式。

  • 在“准确”模式下,我想对所有实数使用 double 。
  • 在“快速”模式下,我想使用单精度。

有什么方法可以用一个标志全局交换我所有的 doublefloat 吗?目前,我正在使用“查找和替换”,这不是最好的处理方式。

编辑:由于有人建议使用模板/泛型,我将添加一个进一步的要求:效率。据我了解,big-F Float 是对值的引用,而 small-f,原始 float 只是值,因此需要更多时间和内存使用原语很有效,尤其是在处理大数组时(我就是)。模板/泛型不能与原语一起使用。所以我想找到一个不需要牺牲效率的解决方案(因为这会破坏整个问题的初衷)。除非我弄错了,并且有一些方法可以使用模板和原语来做到这一点。


到目前为止的结论(2015 年 12 月 28 日 21:00):没有令人满意的方法,只需使用 double。

  • 使用任何包装器都不能令人满意,因为它会导致指针数组,效率低下。

最佳答案

您要找的是 strategy .

创建一个作为实数模型的接口(interface)(或者可能是一个抽象类):

public interface RealNumber {
// Define needed methods here!
}

然后您至少为该接口(interface)创建两个实现:

public final class AccurateRealNumber implements RealNumber {
private final double number;
public AccurateRealNumber(double number) { this.number = number; }
// Implement interface methods here!
}

public final class LazyRealNumber implements RealNumber {
private final float number;
public LazyRealNumber(float number) { this.number = number; }
// Implement interface methods here!
}

然后您仅使用 RealNumber 类型的变量,其实例可以是 LazyRealNumberAccurateRealNumber - 您的选择。

您必须在接口(interface)中声明需要使用的方法,以便您可以在该接口(interface)类型的变量上调用它们。这些方法应该包含您用来解决领域逻辑的领域逻辑。它们应该返回值(尽管它们可以),因为这些值属于不同类型。

关于java - 在 Java 中轻松交换 double/float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432140/

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