方法中的BigDecimal比较问题

时间:2016-01-10 16:18:51

标签: java spring methods bigdecimal

我正在尝试按照高价和低价格范围过滤产品。这是我用

进行测试的网址
  

http://localhost:8080/webstore/products/test?high=900&low=100

这是我的Repository(ProductRepository)

if (guess in GeneratedWords):

这是我的InMemoryProductRepository类,它有原始数据和这个方法

public interface ProductRepository {
    List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}

这是我的服务(ProductService)

public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
        List<Product> productsByPriceFilter = new ArrayList<Product>();

        for(Product product : listOfProducts){
            if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){
                productsByPriceFilter.add(product);
            }
        }
        return productsByPriceFilter;
    }

这是我的服务实现(ProductServiceImpl),它包含这个方法

public interface ProductService {
    List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}

最后这是我的ProductController

public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
        return productRepository.getProductsByPriceFilter(high, low);
    }

但是我不断得到空白页面,没有我通过高或低的所有数据的数据。所以,我想问题取决于 InMemoryProductRepository 类中的 getProductsByPriceFilter 方法。

1 个答案:

答案 0 :(得分:0)

你的比较中存在问题:

if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){

如果您不能说high,则比较结果可能小于-1且同时等于zero。相反,您需要或者在两个条件之间或更好<= 0之间,而low则需要另一种方式:

 if((product.getUnitPrice().compareTo(high) <= 0) && (product.getUnitPrice().compareTo(low) >= 0))