Java 方法中的大十进制比较问题
我试图根据价格高低来筛选产品。这就是我正在测试的URL 这是我的存储库(ProductRepository)Java 方法中的大十进制比较问题,java,spring,methods,bigdecimal,Java,Spring,Methods,Bigdecimal,我试图根据价格高低来筛选产品。这就是我正在测试的URL 这是我的存储库(ProductRepository) 但我总是得到一张空白页,上面没有我传递的所有数据的数据。因此,我猜问题在于在InMemoryProductRepository类中的getProductsByPriceFilter方法。在您的比较中,问题就在这里: if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice()
但我总是得到一张空白页,上面没有我传递的所有数据的数据。因此,我猜问题在于在InMemoryProductRepository类中的getProductsByPriceFilter方法。在您的比较中,问题就在这里:
if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){
同一整数不能同时为>-1和==0。你的情况永远不会是真的。您可能希望
price.compareTo(低)>=0&&price.compareTo(高)条件。compareTo()<-1是错误的。您应该始终将compareTo()的结果与零进行比较。我已经解决了这个问题,但是mu控制器映射正确吗?因为我仍然没有得到任何数据。我是学习Spring的新手,我想你是说你的网页上没有任何产品。这似乎是另一个问题。您应该放入一些调试语句,查看是否获得有效的高值和低值,以及是否返回产品列表中的任何内容。
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;
}
public interface ProductService {
List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}
public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
return productRepository.getProductsByPriceFilter(high, low);
}
@RequestMapping("/products/test")
public String getProductsByPriceFilter(@RequestParam("high") BigDecimal high, @RequestParam("low") BigDecimal low, Model model){
model.addAttribute("product", productService.getProductsByPriceFilter(high, low));
return "products";
}
if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){
if((product.getUnitPrice().compareTo(high) <= 0) && (product.getUnitPrice().compareTo(low) >= 0))