【发布时间】:2015-09-16 16:38:37
【问题描述】:
我正在编写一个代码块,它必须同时支持字符串和数字,因为当输入数字(AtomicInteger、AtomicLong、BigDecimal、BigInteger、Byte、 Double、Float、Integer、Long、Rational、Short 等)。
如何比较? 案例1:输入 - 整数, 较低 - 十进制, 上 - BigInteger
案例 2:输入 - 浮点数, 较低 - 整数, 上 - 长
public boolean isNumberRange(final Object input, final Object lower, final Object upper){
boolean result = false;
final Number nInput = getNumber(input);
final Number nLower = getNumber(lower);
final Number nUpper = getNumber(upper);
if(nInput != null && nLower != null && nUpper != null)
{
Double dInput = nInput.doubleValue();
Double dLower = nLower.doubleValue();
Double dUpper = nUpper.doubleValue();
if(dLower <= dInput && dInput <= dUpper && dInput >= dLower){
result = true;
}
}
return result;
}
private Number getNumber(Object object) throws NumberFormatException{
if(object instanceof String){
final String sObject = object.toString();
if(NumberUtils.isNumber(sObject)) {
return NumberUtils.createNumber(sObject);
}
}
if(object instanceof Number){
return (Number) object;
}
else{
return null;
}
}
在上面的示例中,我将数字转换为 Double 并进行比较。 这是正确的方法吗?是地址 BigInteger 和 AtomicLong 等请告诉我。谢谢
【问题讨论】:
-
你目前的方法有什么问题?
-
@RakshithRavi 问题是它无法编译。
-
@EJP 它可以编译并且工作正常。因为 Double 是 8 个字节。 byte、short、Integer、Long 传递时不会有任何问题。但是如果 BigInteger(56 bytes) 被传递,那将是一个问题。告诉我一种比较两个数字的理想方法或任何可以实现此目的的内置函数
-
@SachinVerma :该解决方案仅在两个数字类型相同的情况下才有效。如果将 12 与 12.0 进行比较,它应该返回 true,但它返回 false。此外,我也更喜欢大于和小于以及不仅等于。
标签: java