我正在用
Java制作货币转换应用程序.其他一些很棒的StackOverflowians给了我建议读取BigDecimal,目的是替换double来解决任何精度问题.
我有两个方法系统;它从起始货币转换为美元,然后将美元价值转换为目标货币.
请注意,我的转化率存储如下:
// Conversion Rates - START (as of October 30, 2018 @ 3:19 AM)
// Rates obtained from exchange-rates.org
//Convert to United States Dollar rates
private final BigDecimal CAD_TO_USD = new BigDecimal(0.76135);
private final BigDecimal EUR_TO_USD = new BigDecimal(1.1345);
private final BigDecimal YEN_TO_USD = new BigDecimal(0.008853);
// Conversion Rates - END
在我用他们各自的BigDecimals取代我的双打之后 – 我决定测试它并看看它是如何运作的.
我的测试人员类运行以下方法来启动转换过程.
public BigDecimal convert()
{
BigDecimal value;
value = convertToUSD(); //Converts the current currency into USD
value = convertFromUSD(value); //Converts the previous USD currency value into the destination currency
return value;
}
当我输入我的样本变量(将2.78 YEN转换为加元)时,我逐步完成了整个过程,发现一切都在运行,直到我返回一个值.
从前面提到的方法,运行convertToUSD()并编码如下
private BigDecimal convertToUSD()
{
switch (fromCurrency)
{
case "USD":
return fromQuantity.multiply(new BigDecimal(1));
case "CAD":
return fromQuantity.multiply(CAD_TO_USD);
case "EUR":
return fromQuantity.multiply(EUR_TO_USD);
case "YEN":
return fromQuantity.multiply(YEN_TO_USD);
}
return new BigDecimal(0);
}
ALl值正确传递,它逐步向下到正确的情况(“YEN”),变量窗格显示“fromQuantity”BigDecimal的intCompact值为278(这对我来说很有意义)
一旦断点返回到“转换”方法,它就会变得混乱.而不是返回2.78 * 0.008853 = 0.0246,它返回-9223372036854775808.
这会导致所有其他计算产生和错误.
我是使用BigDecimal的新手,所以我可能会犯一个完全明显的错误;但我很高兴学习,所以我向你们寻求建议:)
任何帮助表示赞赏.