【问题标题】:Make a type Double behave responsively to Integer and Doubly typed assignments使类型 Double 响应 Integer 和 Double 类型的赋值
【发布时间】:2018-12-08 10:42:43
【问题描述】:

我有这个代码:

public class doubles() {
    private Double a;

    public Double getA(){
        return this.a 
    }
    public void setA(Double a){
      this.a = a
    }
}

例如,我希望变量“a”保留整数的属性

**setA(13)**

即 a=13 而不是 a=13.0

例如,我仍然希望变量“a”具有 Double 的属性

**setA(13.32)**

即 a=13.32

【问题讨论】:

  • 这被称为“方法重载”。几天前我已经回答了这个问题,请看这里:stackoverflow.com/questions/53585110/…
  • 感谢@M.Dan,我查看了链接。但是,提供的答案不适合我的情况,因为我无法声明具有不同类型的变量“a”;就像在 private Double a 和 private Integer a 中一样
  • 看看@mikaelovi下面的代码

标签: java


【解决方案1】:

这是您需要的小代码。请记住,我强烈建议不要遵循此原则。

public class Example {

    private Number a;

    public Number getA() {
        return a;
    }

    public void setA(Double a) {
        if (a % 1 == 0) {
            this.a = a.intValue();
        } else {
            this.a = a;
        }
    }

    public void setA(int a) {
        this.a = a;
    }

    public static void main(String[] args) {
        double integerNumber = 6;

        Example example = new Example();
        example.setA(integerNumber);
        System.out.println(example.getA());
    }

}

【讨论】:

  • 感谢您的回复,但它仍然输出 5.0。在这种情况下希望它输出 5,如果给出 5.3,则输出 5.3
  • 已应用更改,看看! @mikaelovi
【解决方案2】:

除了使用另一个答案中提出的基类 Number 之外,还可以使用 BigDecimal:一个存储精度/小数位的类。因此 3.10 * 2.00 = 6.2000。

   new BigDecimal("3.10").multiply(new BigDecimal("2.00"))

缺点:笨拙的冗长。

优点:精度(称为尺度)且不存在浮点的逼近误差:3.1 = 3.100 = 实际上是 3.099999871...

【讨论】:

  • 非常感谢您的方法,但我会接受已接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多