如何将 BigDecimal 传递给方法?
How to pass a BigDecimal to a method?
这是我的第一个 Java 应用程序。我正在尝试创建产品(键)及其价格(值)的地图。文档说我不能用双打换钱,所以我必须使用 BigDecimal。我现在完全不知道如何在我的方法和地图中使用 BigDecimal。
我只有一种方法可以将产品添加到地图,并且我正在尝试传递 BigDecimal 价格。它不会编译,因为它看到的是字符串而不是 BigDecimal,这让我很困惑,因为 BigDecimal 接受字符串作为参数(例如 BigDecimal example = new BigDecimal("2.50") )
我还想创建一个将价格加到总价中的方法,但不能使用字符串来实现。 BigDecimal 上的文档非常混乱,Google 也不是很有帮助。有人可以解释一下 BigDecimal 以及如何使用它吗?
到目前为止,这是我的代码:
注册class:
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class Register {
private HashMap<String, BigDecimal> productMap = new HashMap<>();
public void printProductMap() {
for(Map.Entry<String, BigDecimal> entry : productMap.entrySet()) {
String key = entry.getKey();
BigDecimal value = entry.getValue();
System.out.println(key + " " + value);
}
}
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
BigDecimal productPrice = new BigDecimal(price);
productMap.put(product, productPrice);
return productMap;
}
}
主要class:
public class Main {
public static void main(String[] args) {
Register register = new Register();
register.addProduct("Coffee", "1.25");
register.addProduct("Cappuccino", "1.50");
register.printProductMap();
}
}
检查可用的构造函数here。有一个接受 long 作为参数 (BigDecimal(long val)
).
register.addProduct("Coffee", new BigDecimal(1.25));
register.addProduct("Cappuccino", new BigDecimal(1.50));
查看@BackSlash 的评论,似乎将 double
或 float
传递给 BigDecimal
可能无法准确处理,因此请改用 BigDecimal(String val)
:
register.addProduct("Coffee", new BigDecimal("1.25"));
register.addProduct("Cappuccino", new BigDecimal("1.50"));
事实上 BigDecimal
有一个采用 String
的构造函数并不意味着可以将 String
传递给采用 BigDecimal
的方法。
这个问题有两种解决方法:
- 将
addProduct
的第二个参数的类型更改为 String
- 代码将继续编译,因为您在其中构造了 BigDecimal
方法,或
- 为第二个参数传递
new BigDecimal
- 调用如下所示:register.addProduct("Coffee", new BigDecimal("1.25"));
第一种方法的更改如下所示:
public HashMap<String, BigDecimal> addProduct(String product, String price) {
// This is the only change -------------------------------^^^^^^
BigDecimal productPrice = new BigDecimal(price);
productMap.put(product, productPrice);
return productMap;
}
第二种方法的更改如下所示:
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
// No need to create productPrice, because price is BigDecimal
productMap.put(product, price);
return productMap;
}
这是我的第一个 Java 应用程序。我正在尝试创建产品(键)及其价格(值)的地图。文档说我不能用双打换钱,所以我必须使用 BigDecimal。我现在完全不知道如何在我的方法和地图中使用 BigDecimal。
我只有一种方法可以将产品添加到地图,并且我正在尝试传递 BigDecimal 价格。它不会编译,因为它看到的是字符串而不是 BigDecimal,这让我很困惑,因为 BigDecimal 接受字符串作为参数(例如 BigDecimal example = new BigDecimal("2.50") )
我还想创建一个将价格加到总价中的方法,但不能使用字符串来实现。 BigDecimal 上的文档非常混乱,Google 也不是很有帮助。有人可以解释一下 BigDecimal 以及如何使用它吗?
到目前为止,这是我的代码:
注册class:
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
public class Register {
private HashMap<String, BigDecimal> productMap = new HashMap<>();
public void printProductMap() {
for(Map.Entry<String, BigDecimal> entry : productMap.entrySet()) {
String key = entry.getKey();
BigDecimal value = entry.getValue();
System.out.println(key + " " + value);
}
}
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
BigDecimal productPrice = new BigDecimal(price);
productMap.put(product, productPrice);
return productMap;
}
}
主要class:
public class Main {
public static void main(String[] args) {
Register register = new Register();
register.addProduct("Coffee", "1.25");
register.addProduct("Cappuccino", "1.50");
register.printProductMap();
}
}
检查可用的构造函数here。有一个接受 long 作为参数 (BigDecimal(long val)
).
register.addProduct("Coffee", new BigDecimal(1.25));
register.addProduct("Cappuccino", new BigDecimal(1.50));
查看@BackSlash 的评论,似乎将 double
或 float
传递给 BigDecimal
可能无法准确处理,因此请改用 BigDecimal(String val)
:
register.addProduct("Coffee", new BigDecimal("1.25"));
register.addProduct("Cappuccino", new BigDecimal("1.50"));
事实上 BigDecimal
有一个采用 String
的构造函数并不意味着可以将 String
传递给采用 BigDecimal
的方法。
这个问题有两种解决方法:
- 将
addProduct
的第二个参数的类型更改为String
- 代码将继续编译,因为您在其中构造了BigDecimal
方法,或 - 为第二个参数传递
new BigDecimal
- 调用如下所示:register.addProduct("Coffee", new BigDecimal("1.25"));
第一种方法的更改如下所示:
public HashMap<String, BigDecimal> addProduct(String product, String price) {
// This is the only change -------------------------------^^^^^^
BigDecimal productPrice = new BigDecimal(price);
productMap.put(product, productPrice);
return productMap;
}
第二种方法的更改如下所示:
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
// No need to create productPrice, because price is BigDecimal
productMap.put(product, price);
return productMap;
}