首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将BigDecimal传递给方法?

如何将BigDecimal传递给方法?
EN

Stack Overflow用户
提问于 2017-11-24 17:15:08
回答 2查看 9.4K关注 0票数 4

这是我的第一个Java应用程序。我试图创建一个产品(钥匙)和他们的价格(价值)的地图。文档中说我不能用双倍作为钱,所以我必须使用BigDecimal。关于如何在我的方法和地图中使用BigDecimal,我现在完全被困住了。

我只有一种将产品添加到地图上的方法,并且我正在尝试传递一个BigDecimal价格。它不会编译,因为它看到的是字符串而不是BigDecimal,这使我感到困惑,因为BigDecimal接受字符串作为参数(例如BigDecimal示例=新的BigDecimal("2.50") )

我还想要创建一个方法,将价格增加到一个总计,但你不能用字符串。关于BigDecimal的文档非常令人困惑,谷歌也没有多大帮助。有人能解释一下BigDecimal的用法吗?

到目前为止,这是我的代码:

注册类别:

代码语言:javascript
复制
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;
    }
}

主修班:

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 17:19:30

BigDecimal有一个接受String的构造函数这一事实并不意味着将String传递给使用BigDecimal的方法是好的。

这个问题有两种解决办法:

  • addProduct 的第二个参数的类型更改为 String -代码将继续编译,因为您在方法中构造BigDecimal,或者
  • Pass for第二个参数--调用如下所示:register.addProduct("Coffee", new BigDecimal("1.25"));

第一种方法的变化如下所示:

代码语言:javascript
复制
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;
}

第二种方法的变化如下:

代码语言:javascript
复制
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
    // No need to create productPrice, because price is BigDecimal
    productMap.put(product, price);
    return productMap;
}
票数 5
EN

Stack Overflow用户

发布于 2017-11-24 17:17:37

检查可用的构造函数这里。有一个接受长作为参数(BigDecimal(long val))。

代码语言:javascript
复制
 register.addProduct("Coffee", new BigDecimal(1.25));
 register.addProduct("Cappuccino", new BigDecimal(1.50));

检查@反斜杠的注释,似乎没有精确地将doublefloat传递给BigDecimal,所以请使用BigDecimal(String val)

代码语言:javascript
复制
register.addProduct("Coffee", new BigDecimal("1.25"));
register.addProduct("Cappuccino", new BigDecimal("1.50"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47477685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档