数字类型除法

Division with Number type

我有一个服务器调用,其中 returns 值类型为“数字”。 这个值需要转换和存储。

例如:Transformation = value/10(这里的值是服务器的响应)

这些转换对于不同的数据点可能不同。现在,我认为转换是 (value/10)

Number modifiedValue = applyTransformation(event.getValue().getValue(),transformation);


private Number applyTransformation(Number value, String transformation) {
    Number dinominator = Integer.parseInt(transformation.substring(transformation.lastIndexOf("/")+1));
    
    Number modifiedValue = value/dinominator; //Produces an error

     return modifiedValue;


  }

错误:“参数类型 java.lang.Number、java.lang.Number 的运算符 / 未定义”

有什么处理这个问题的建议吗?

是除法运算符不适用于参数 java.lang.Number。但是你可以将 Number 转换为 java.math.BigDecimal 你可以应用它。示例代码如下。

输出为:

5

5.0

5.0

5

public static void main(String[] args) {

    Number result = divideByNumber(10l, 2l);

    //Test data
    result = divideByNumber(10, 2l);
    System.out.println(result);

    result = divideByNumber(10.0, 2l);
    System.out.println(result);

    result = divideByNumber(10.0f, 2l);
    System.out.println(result);

    result = divideByNumber(new BigDecimal("10"), 2l);
    System.out.println(result);
}

static Number divideByNumber(Number n1, Number n2){
    return new BigDecimal(n1.toString()).divide(new BigDecimal(n2.toString()));
}

如果您阅读 java.lang.Number 的 API 文档,您会发现

  1. 它是一个抽象class,所以没有实例状态! (所以它不能容纳任何东西,除非它是从它延伸的 class 的一部分,例如 Integer , Double Float BigDecimal e.t.c。)

  2. 如果它确实以数字形式存在,最好通过 instanceof 使用测试找到其实际的“实例化”子类型 (本页代码换行按钮有问题)

    收到的号码=event.getValue().getValue();

     int ​recval;
    
     float trans;
    
     int transasint;
    
     if (recieve instanceof Integer){
    
     ​recval = ((Integer)recieve).intValue();
    
     trans = recval/10;
    
     transasint = new Float(trans).intValue();
    

}